#include <stdio.h> int main(void) { int c, i ,nwhite,nother; int ndigits[10]; nwhite = nother =0; for(i=0;i<10;++i) ndigits[i]=0; while((c=getchar())!=EOF) if(c>='0'&&c<='9') ++ndigits[c-'0']; else if(c == ' '|| c=='\n'||c=='\t') ++nwhite; else ++nother; printf("digits ="); for(i=0;i<10;i++) printf("%d",ndigits[i]); printf(",white space= %d,other =%d\n",nwhite,nother); }
注意:
if(c>='0'&&c<='9')
++ndigits[c-'0'];
如果是数字就将其对应下标的值加1,这样就可以统计相应数字出现的次数.由定义可知,char类型的字符是小整型,因此 char 类型的变量和常量在算术表达式中等价于int类型的变量和常量.c-'0'是一个整型的表达式,如果存储在c中的字符是'0'--'9',其值为0--9,因此可以充当数组ndigits的合法下标.
输入 :
1111222233554678
asdfghjk vcjvjbbnmbm
hghgh~~22
输出:
digits =0462121110,white space= 5,other =26
2 该程序读入一组文本行,并把最长的文本行打印出来.
while(还有未处理的行)
if(该行比已处理的最长行还要长)
保存该行
保存该行的长度
打印最长的行
#include <stdio.h> #define MAXLINE 1000 //允许的输入行的最大长度 int getline1(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=getline1(line,MAXLINE))>0) if(len>max) { max=len; copy(longest,line); } if(max>0) printf("%s",longest); return 0; } //将一行读入到s中并返回其长度 int getline1(char s[],int lim) { int c,i; for(i=0;i<lim-1 &&(c=getchar())!=EOF && c!='\n';++i) s[i]=c; if(c=='\n') { s[i]=c; ++i; } s[i]='\0'; return i; } //将from 复制到to void copy(char to[],char from[]) { int i; i=0; while((to[i] = from[i])!='\0') ++i; }