这道题关于单词数的那段完全看不懂。。。请教请教各位大佬。。。。。。。。
这里很好理解啊,我们来举个例子,假如我输入
i love you
i love you
当我输入i的时候,首先++nc,这没有疑问,然后通过判断语句i不是换行\n,不是空格,也不是制表符\t。并且state初始化的是OUT,所以执行
else if 下面的语句
,即改变state的状态,并且增加一个单词 ++nw,你可能会疑问,我才输入一个字符怎么就增加一个单词,那是因为,不管第一个单词是几个字符,
只要下一次输入的是空格或者制表符或者\n,就是一个单词。好!不说废话,输入i后紧接着我们输入一个空格,程序会怎么样呢?废话,当然是++mc,state = out,然后等下一个输入,下一个输入l,++nc,然后呢state=in ,++nw,然后输入o,++nc,然后输入v,++nc,然后输入e,++nc,再然后又是一个空格,++nc,state=out。然后输入的是y,++nc,state=in,++nw
以此类推 总之一句话每个单词输入第一个字符的时候++nw,而不是单词输完后++nw 就是这么简单,转换一下思维就很容易理解了
对输入字符进行判断,当读取的字符不为结束符时,总字数(nc)+1,当当前取得字符(c)为换行符(\n)时,行数(nl)+1,为界符(空格、换行、制表符)时,表明已经出字符,就把state设置成词外(out);否则,只在读取第一单词字符时把state设成词内(in),并把单词数(nw)+1,知道下一次出单词后再进时单词数才会改变。
扫描一个字符串,遇到界符(空格、换行、制表符),单词数(nw)+1,遇到换行,行数(nl)+1,遇到连续的单词或者连续的界符,static不改变,不统计。
这个代码可以拆开么,我做题也需要统计单词数,但是我不喜欢书上用法,我比较喜欢这个代码