【发布时间】:2014-01-25 23:19:48
【问题描述】:
所以我应该计算一个多行的txt文件中有多少单词,单词被定义为连续的字母序列(a到z,A到Z)和由任何字符分隔的撇号在这些范围之外。
我有我认为正确的内容,但字数总是出错。有人看到我的代码有什么奇怪的地方吗?
请忽略行数和字符数,因为它们工作正常。我尝试计算单词之间的空格,其中 32 是空格的 ASCII 码。
#include <stdio.h>
int main()
{
int c;
int charcount = 0;
int wordcount = 1;
int linecount = 0;
while (c != EOF)
{
c = getchar();
if (c == EOF)
break;
if (c == 10)
linecount++;
charcount++;
if (c == 32)
wordcount++;
}
printf ("%d %d %d\n", charcount, wordcount, linecount);
return 0;
}
例如,其中一个 txt 文件说:
Said Hamlet to Ophelia,
I'll draw a sketch of thee,
What kind of pencil shall I use?
2B or not 2B?
这里的字数是 21,但我得到的字数是 18。我尝试计算 "/n" 的数量,它适用于本次测试,但在下一次测试中失败。
提前致谢!
【问题讨论】:
-
在您的代码中,只有空格字符会增加单词的数量,因此不计算行尾的单词。
-
wordcount = 空白字符数 + 1。(如果你的文件以换行符结尾,甚至不需要加 1)。
-
您应该在调试器中单步执行并弄清楚。此站点不是调试服务。
-
顺便说一句,不要使用 10 和 32 作为硬字符代码。 C 不强制要求 ASCII/UTF-8,更糟糕的是,它们很难阅读。此外,
while (c != EOF)是多余的,它可能只是while (1)。或者while ((c = getchar()) != EOF),如果你想打扰可读性怪胎(比如我)。 -
@H2CO3 没那么容易。如果您有 2,3 等连续空格,您仍然可以计算字数
标签: c