【发布时间】:2020-10-26 10:17:21
【问题描述】:
我正在尝试编写一个程序来计算文本中的字母、单词和句子的数量。我可以假设一个字母是从 a 到 z 的任何小写字符或从 A 到 Z 的任何大写字符,任何由空格分隔的字符序列都应该算作一个单词,并且任何出现的句点、感叹号或问号表示句尾。
到目前为止,我可以正确计算字母和句子的数量,但我错过了单词的数量:
例如 是的!
输出应该是: 3 个字母 1 个字 1 句
我得到的是: 3 个字母 0 字 1 句
更新:在 printf 函数之前最后输入另一个(words++)后,它现在可以正常工作了。谢谢你们的帮助:)。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
string text = get_string("Enter text: ");
printf("Output:\n");
int lettercount;
int words = 0;
int sentences = 0;
int letters = 0;
int length = strlen(text);
for(lettercount = 0; lettercount < length; lettercount++)
{
if(isalpha(text[lettercount]))
{
letters++;
}
else if(text[lettercount] == ' ' || text[lettercount] == '\t' || text[lettercount] == '\n' || text[lettercount] == '\0')
{
words++;
}
else if(text[lettercount] == '.' || text[lettercount] == '!' || text[lettercount] == '?')
{
sentences++;
}
}
words++;
printf("%i letter(s)\n", letters);
printf("%i word(s)\n", words);
printf("%i sentence(s)\n", sentences);
}
【问题讨论】:
-
你用更短的句子测试和调试过吗?将测试数据减少到尽可能简单并且仍然重现问题(例如两个词)。然后使用调试器和/或调试打印语句来跟踪程序执行。
-
提示:
text[lettercount] == '\0'总是错误的。另外提示:strlen的字符串长度为 O(n),不要在每次循环中调用它。 -
我认为您的问题可以通过一个单词的句子来重现,例如:
Yes!