计算字符串中的单词?

你好这个程序我应该计算一个字符串中的单词数。 到目前为止,我已经找到了如何找到一个字符串中的字符数,但我无法弄清楚如何翻转一个单词的字母,并将其计为一个单词。

我的function是:

int wordcount( char word[MAX] ){ int i, num, counter, j; num = strlen( word ); counter = 0; for (i = 0; i < num; i++) { if (word[i] != ' ' || word[i] != '\t' || word[i] != '\v' || word[i] != '\f') { } } return counter; } 

我尝试了一些变化,但if语句的中间部分是我感到困惑的地方。 如何计算字符串中的单词数? 如果字符串有多个空格,例如“Hello this is a string”,则测试此测试

提示只是因为这可能是功课。

你想要计算的是’单词’字符和空格之间的转换次数。 这将需要记住最后一个字符并将其与当前字符进行比较。

如果一个是空白而另一个不是,那么你就有了一个过渡。

通过更多细节,将lastchar初始化为空格,然后遍历输入中的每个字符。 如果lastchar是空格而当前字符不是,则增加字数。

不要忘记在每次循环迭代结束时将当前字符复制到lastchar 。 并且应该不用说,应该将字数初始化为0。

有一个linux util’wc’可以计算单词。

看看(包括一些解释和样本):

http://en.literateprograms.org/Word_count_(C)

和源的链接

http://en.literateprograms.org/index.php?title=Special:DownloadCode/Word_count_(C)&oldid=15634

当你在if部分时,这意味着你在一个单词中。 因此,您可以标记此inword并查看您是否从单词(这将是您的其他部分)更改为inword和back。

这是一个快速的建议 – 可能有更好的方法,但我喜欢这个。

首先,一定要“知道”单词的构成。 让我们假设它仅由字母组成。 所有其余的,标点符号或“空白”,可以被视为分隔符。

然后,您的“系统”有两种状态:1)完成一个单词,2)跳过分隔符。

您可以使用跳过分隔符代码的免费运行来开始您的代码。 然后输入“完成单词”状态,您将保留该状态直到下一个分隔符或整个字符串的结尾(在这种情况下,您退出)。 当它发生时,你已经完成了一个单词,所以你将单词计数器增加1,然后进入“跳过分隔符”状态。 循环继续。

伪C类代码:

 char *str; /* someone will assign str correctly */ word_count = 0; state = SKIPPING; for(c = *str; *str != '\0'; str++) { if (state == SKIPPING && can_be_part_of_a_word(c)) { state = CONSUMING; /* if you need to accumulate the letters, here you have to push c somewhere */ } else if (state == SKIPPING) continue; // unneeded - just to show the logic else if (state == CONSUMING && can_be_part_of_a_word(c)) { /* continue accumulating pushing c somewhere or, if you don't need, ... else if kept as placeholder */ } else if (state == CONSUMING) { /* separator found while consuming a word: the word ended. If you accumulated chars, you can ship them out as "the word" */ word_count++; state = SKIPPING; } } // if the state on exit is CONSUMING you need to increment word_count: // you can rearrange things to avoid this when the loop ends, // if you don't like it if (state == CONSUMING) { word_count++; /* plus ship out last word */ } 

如果read char在[A-Za-z_]中,则函数can_be_part_of_a_word返回true,否则返回false。

(它应该工作如果我没有因为疲劳的咒语而犯了一些严重的错误)