如何计算换行符、空格与制表符的个数(以及为何不能用此法来算单词数)

来源:互联网 发布:淘宝订购的应用 编辑:程序博客网 时间:2024/05/21 12:48

计算个数

我在如何计算的过程中总会输出一些莫名其妙的数字,后来才知道是因为换行符的关系,因此需要一个类似下面flag 的标志来判断是否由换行(以及continue的使用)。
代码如下:

 1 #include <stdio.h> 2  3 int main() 4 { 5     int c,m,n,l; 6     m=n=l=0; 7     /* m代表空格个数,n代表制表符个数,l代表换行符个数 */ 8     int flag=0;//表示是否遇到换行符  9     while((c = getchar()) != EOF)10     {11         if(c == '\n')12         {13             ++l;14             flag = 1;15             continue;16         }17         else if(flag == 0)18         {19             if(c == ' ')20             {21                 ++m;22             }23             if(c == '\t')24             {25                 ++n;26             }27         }            flag = 0//这句不能少28     }29     printf("%d %d %d",m,n,l);30     31     return 0;32 }

计算单词问题

用这个方法可以算出换行符、空格与制表符的个数,但是如果单词之间有多个空格或者有多个换行就不行。
因此我还试过用标志变量来判断一个空格或换行之后还是不是空格或换行,在codeblocks上正常运行,但是把作业交上去就会少一,我一开始认为是系统问题或者是输入EOF的方式不同,所以我直接在数字上加一,结果发现还是不能,在随机检测那里又会变回正常状态,所以我觉得应该是作业里面EOF的输入都不一样,所以这个方法就放弃了
之后被室友cyx一提醒,就想起可以通过判断ch是否在97-122内来确定是不是单词,同样用标志变量来判断单词是否已经结束(即后面是否会小于97或大于122),这个方法就简便很多。结果也正确。

做此题时还出现的其他问题,
①出现一竖行的空格。解决:判断这一竖行的是不是等于0即将else换成else if(a[i] != 0)
②缺少a的、字母与星号不对应的。解决:是因为前面的循环的初始值错误,或者在用ascii码变换输出字符时97写成96


以上皆为个人观点,如有意见,欢迎讨论。

0 0
原创粉丝点击