大家好,我刚开始通过 THE c PROGRAMMING LANGUAGE Second Edition 学习 C 布赖恩。 W.克尼南 (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);
}
那么这两者有什么区别,为什么作者要用state来定义IN和OUT呢??
[编辑] 哦!我明白了,脚本只是为了避免两件事: 1.避免单词后有多个空格时的单词计数。 2. 其次,如果间距合适,我的脚本会计算 n-2 个单词。 这使得作者的脚本更加完整.....除了这两个还有别的吗??
也感谢您的回答....
P.S:很抱歉,这有点离题了,可以将问题标记为 [已解决] 还是有其他方法可以做到这一点??
最佳答案
你的版本与他的版本略有不同:在你的程序中,如果你有 N 个连续的空格,它们将被视为 N - 1 个单词,因为每一个空格你都会将单词计数加一。此外,不会考虑最后输入的单词。
关于c - 在以下脚本中使用 IN 和 OUT 状态需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609836/