【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 }

 

posted @ 2016-09-28 00:19  Amoshen  阅读(843)  评论(0编辑  收藏  举报