你好这个程序我应该计算一个字符串中的单词数。到目前为止,我已经找到了如何找到一个字符串中的字符数,但我无法弄清楚如何转换成一个单词的字母,并将其计为一个单词。
我的功能是:
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”
,则测试此测试答案 0 :(得分:3)
仅提示,因为这可能是家庭作业。
您想要计算的是“单词”字符和空格之间的转换次数。这将需要记住最后一个字符并将其与当前字符进行比较。
如果一个是空格而另一个不是空格,那么你就有了过渡。
有了更多细节,请将lastchar
初始化为空格,然后循环输入中的每个字符。如果lastchar
是空格而当前字符不是,则增加字数。
不要忘记在每次循环迭代结束时将当前字符复制到lastchar
。并且应该毫无疑问地将单词count初始化为0。
答案 1 :(得分:2)
有一个可以计算单词的linux util'wc'。
看一下(包括一些解释和样本):
http://en.literateprograms.org/Word_count_(C)
和指向来源的链接
http://en.literateprograms.org/index.php?title=Special:DownloadCode/Word_count_(C)&oldid=15634
答案 2 :(得分:0)
当你在if部分时,这意味着你在一个单词中。因此,您可以标记此inword
并查看您是否从单词(将是您的其他部分)更改为inword
并返回。
答案 3 :(得分:0)
这是一个快速的建议 - 可能有更好的方法,但我喜欢这个。
首先,一定要“知道”单词的构成。让我们假设它仅由字母组成。所有其余的,标点符号或“空白”,都可以被视为分隔符。
然后,你的“系统”有两种状态: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。
(它应该有效如果我没有因为疲倦而做出一些严重的错误)