【ACM小白成长撸】--计算单词个数
我判断单词个数的方法,根据空格‘ ’的个数
分情况
- 当没有单词的时候
判断第一个符号,即a[0] == ‘\0’时,赋值给存储个数的数组
- 当遇到空格时,只有前面一个字符不是空格字符,后面一个字符不是空格字符,才能判断一个word
注意事项:
- 当输入组数时,最后回车输入缓冲区里面,gets会得到一个回车符号,所以为了消除缓冲区的回车,需要利用fflush函数
- 当遇到最后一个‘\0’时,要在已有的words数目上加一,比如,"i love you",这儿有2个空格,不加一的话,words数目就2个,显然不符合要求。
1 /*程序的版权和版本声明部分: 2 *Copyright(c) 2016,电子科技大学本科生 3 *All rights reserved. 4 *文件名:ACM_UESTC_OJ60 5 *程序作用:统计单词个数 6 *作者:Amoshen 7 *完成日期:2016.9.26 8 *版本号:V1.0 9 */ 10 11 #include <stdio.h> 12 #include <stdlib.h> 13 14 int main(void) 15 { 16 int i,m; 17 int j;//j为计数器 18 char *p; 19 char b[100]; 20 int a[9999]; 21 22 scanf("%d",&i); 23 fflush(stdin);//清除缓冲区,避免到后面直接跳过gets 24 25 for(m = 0;m < i;m++) 26 { 27 gets(b); 28 29 if(b[0] == '\0')//当不输入任何单词时,最后有回车符号,排除此情况,gets不能读换行符,遇到'\0'结束输入 30 { 31 a[m] = 0; 32 continue; 33 } 34 else 35 { 36 if(b[1] == '\0') 37 { 38 a[m] = 1; 39 free(p); 40 continue; 41 } 42 } 43 44 p = b; 45 46 for(j = 0;;p++) 47 { 48 if((*p == ' ')&& (*(p - 1) != ' ')&&(*(p + 1) != ' ')) 49 { 50 j = j + 1; 51 } 52 if(*p == '\0'&& j != 0) 53 { 54 j = j + 1; 55 a[m] = j; 56 break; 57 } 58 } 59 } 60 61 for(m = 0;m < i;m++) 62 { 63 printf("%d\n",a[m]); 64 } 65 66 return (0); 67 }