【发布时间】:2016-08-15 21:33:36
【问题描述】:
我实现了这个代码来获得否。字数。它适用于所有单个字符,即如果我输入 "q w r " 作为输入,它会给我 3 个单词,但是当我输入 "qwe ed df " 作为输入时,它显示 2。
#include<stdio.h>
int main()
{
int c=getchar();
int words=0;
while(c!=EOF)
{
if(c==' ' || c=='\n')
{
c=getchar();
}
else if(c>='a' && c<='z')
{
c=getchar();
if(c==' ')
{
words=words+1;
c=getchar();
}
else
{
c=getchar();
}
}
}
printf("%i\n",words);
}
【问题讨论】:
-
正常的技术是使用
while ((c = getchar()) != EOF)——顺便说一句,你会因为使用int c;而不是char c;而受到称赞——然后在循环中跟踪“我在说一句话”。如果您在一个单词中并且您阅读了一个非空格,那么您仍然在一个单词中。如果您在一个单词中并且您阅读了一个空格,那么您已经完成了一个单词(并且不再是一个单词)。如果你不在一个词中并且你得到一个非空格字符,那么你现在在一个词中;增加字计数器。如果你不在一个词中并且你得到一个空格,那么你仍然不在一个词中。<ctype.h>标头具有字符分类宏。 -
读取在一个地方或前瞻和
ungetc。 -
如果文件很大,考虑缓冲你的读取(例如
char buf[1024] = ""; while (fgets (buf, 1024, stdin)) { char *p = buf; [your logic here]})。原因是,内存中的操作比一次一个字符的文件 I/O 快 数量级。 (您可以选择您的buf大小以使其有意义。您将看到缓冲区小至 8 个字符的显着改进)
标签: c word-count