我正在编写一个函数来计算用户输入的文本字符串中的单词数。目前我已经将
word_count
设置为每次遇到空格或标点符号时都会增加,但我知道这是不对的,因为当它到达句子末尾时它会增加两次。当它遇到单词中的撇号或连字符时,它也会增加。
我认为我需要修改我的 for 循环以将单词视为字符序列,后跟空格或标点符号(但不是撇号或连字符),和/或以某种方式向前查看字符串以查看是否有另一个接下来是空格/标点符号,然后在这种情况下不再增加
word_count
。但我不确定如何做这两件事(或者是否有更好的方法)。
我是一名完全的初学者,并将此练习作为 CS50 第 2 周可读性问题集的一部分进行。我不想要最终的答案——只想要一些线索!预先感谢。
int count_words(string text)
{
int length = strlen(text);
int word_count = 0;
for (int i = 0; i < length; i++)
{
if (isspace(text[i]) || ispunct(text[i])) word_count++;
}
return word_count;
}
如果我输入“这应该是 8 个字。但事实并非如此。”它应该返回 8 个单词。相反,它返回 10。
我建议你探索“有限状态自动机”的世界 这里有两种状态: 1:一句话 2:说一句话 ...之后计算从进到出的转换次数