程序一:编写一个程序,以每行一个单词的形式打印其输出
解法一:设置标志,
#include <stdio.h> int main(void) { int c,flag; flag = 0; while ( (c=getchar()) != EOF) { if (c==' ' || c=='\t' || c=='\n') { if (flag == 0) { flag = 1; putchar('\n'); } } else { flag = 0; putchar(c); } } return 0; }
程序二:该程序读入一组文本,并把最长的文本行打印出来。
#include <stdio.h> #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); /* 打印输出最长行 */ int main(void) { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while ( (len=getline(line,MAXLINE)) > 0) { if (len > max) { max = len; copy(longest,line); } } if (max > 0) printf("%s",longest); return 0; } /*将一行读入到s中并返回其长度*/ int getline(char s[], int lim) { int c,i; for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i) s[i] = c; //保存'\n'的 if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } void copy(char to[], char from[]) { int i; i = 0; while ( (to[i] = from[i]) != '\0') //将'\0'也给拷贝了 ++i; }程序三:编写一个程序,打印长度大于80个字符的所有输入行
解法:仔细看看别人的思路
#include <stdio.h> #define MINLENGTH 81 int readbuf(char *buf); //读取字符到buf中,并记录状态 int copyline(char *buf); //打印输出 int main(void) { char buffer[MINLENGTH]; int status = 0; while (status != -1) { status = readbuf(buffer); if (status == 1) status = copyline(buffer); } return 0; } int readbuf(char *buf) { int i,c; i = 0; while (i < MINLENGTH) { c = getchar(); if (c == EOF) return -1; if (c == '\n') return 0; buf[i++] = c; } return 1; } int copyline(char *buf) { int i; int c; int status = 1; for(i=0; i<MINLENGTH; i++) putchar(buf[i]); while(status == 1) { c = getchar(); if (c == EOF) status = -1; else if (c == '\n') status = 0; else putchar(c); } putchar('\n'); return status; }
程序四:编写函数reverse(s),将字符串s中的字符顺序颠倒过来,使用该函数编写一个程序,每次颠倒一个输入行中的字符
#include <stdio.h> #include <string.h> #define MAXLINE 1024 int getline(char *buf, int lim); // lim是一行限制最大长度 void reverse(char *buf); void swap(char *a, char *b); int main(void) { char buf[MAXLINE]; int len; while ( (len=getline(buf,MAXLINE)) > 0) { buf[len-1] = '\0'; reverse(buf); printf("%s\n",buf); } return 0; } int getline(char s[], int lim) { int c,i; for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i) s[i] = c; //保存'\n'的 if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } void swap(char *a, char *b) { char tmp = *a; *a = *b; *b = tmp; } void reverse(char *buf) { int i,j; j = strlen(buf) - 1; for (i=0; i<j; ++i,--j) swap(&buf[i],&buf[j]); }