如果有两个空格,则将其计为3个单词

时间:2018-05-29 01:15:11

标签: c

date                        A      I   r         z
0 2017-08-01 00:00:00       3      56  4         6.   
1 2017-08-01 01:00:00       3      57  1         6   
2 2017-08-01 02:00:00       3      58  9         6   
3 2017-08-01 03:00:00       3      52  10        2.  
4 2017-08-01 04:00:00       3      50  1         1  

问题是:一个被调用的C程序计算从标准输入读取的字符数,字数和行数,直到达到EOF。 单词被定义为连续的字母序列(a到z,A到Z)和由这些范围之外的任何字符分隔的撇号(',十进制值39)。 行被定义为由换行符分隔的连续字符序列(' \ n')。 最终换行符之外的字符不会包含在行数中。

对于大多数情况,它会正确计算单词的数量,但我不认为我的wordcount条件是正确的

1 个答案:

答案 0 :(得分:2)

您的程序未正确处理字分隔符。相反,它包含假设任何单词分隔符标记单词的结尾。所以即使没有任何一个词开始,它也在计算一个单词。

你可以用很多方法来解决这个问题,但总的想法是保持某种状态,这种状态代表你要么在一个词中,要么就是在词之间。

以下是一个这样的例子:

int wordcount = 0;
int betweenwords = 1;
while((ch=getchar())!=EOF)
{
    if (!isspace(ch)) {
        wordcount += betweenwords;
        betweenwords = 0;
    }
    else {
        betweenwords = 1;
    }
}

这不符合一个单词与你的程序相同的标准(我的所有非空格字符都被视为单词),但是它很容易适应。这里的要点是要明白你可以使用某种状态变量来确定是否增加你的字数。在我的例子中,状态变量也用作增量。