大家好,我刚开始通过编程语言第二版学习C语言 布莱恩W.Kernighnan(ISBN-13:978-8131704943)
所以这是一个对字符,行,单词进行计数的脚本
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c, nl, nw, nc, state;
/* c = input, nl = new line, nc = new character, nw = new word, state = (IN/OUT) */
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf(" The number of lines is: %d,\n The number of words is: %d,\n The number of characters is: %d. \n", nl, nw, nc);
}
然而,我制作了一个脚本,无需定义状态IN和OUT
即可执行以下操作#include <stdio.h>
main()
{
int nw, nl, nc, c ;
nl = nw = nc = c = 0 ;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
++nl;
else if (c == ' ' || c == '\n' || c == '\t')
++nw;
}
printf("Words:%d \nCharacters:%d \nLines:%d", nw, nc, nl);
}
那么这两者之间有什么区别,为什么作者使用状态来定义IN和OUT ??
[编辑] 哦!我看到脚本只是为了避免两件事: 1.当单词后面有多个空格时,避免字数统计。 其次,如果适当的间距,我的脚本会计算n-2个字。 这使得作者的脚本更加全面.....除了这两个之外还有什么其他的吗?
谢谢你的回答......
P.S:对不起,这有点偏离主题,可以标记问题[已解决]还是有其他方法可以做到这一点?
答案 0 :(得分:2)
IN
字面意思是“在一个词内”而OUT
字面意思是“在一个词之外”。他正在通过线条跟踪状态光标的状态。
答案 1 :(得分:2)
您的版本与他的版本略有不同:在您的程序中,如果您有N个连续的空格,它们将被视为N - 1个单词,因为对于每个空格,您都会在单词计数中添加一个空格。此外,最后一个输入词不会被考虑。