C 一行输出一个单词
貌似以前也看到有一道题是这样的,这里发现了思维不够严密,比如我是这么写的:
#include <stdio.h>
#define IN 1
#define OUT 0
main(void)
{
int c, state;
while ((c = getchar()) != EOF) {
if (c == '\t' || c == ' ')
printf("\n");
else
putchar(c);
}
return 0;
}
很显然,这样我们就没有办法对“多余空格”的情况做出恰当的处理,要结合C 删除多余空格的思路思考。这样一想,K&R中的1.5.4的state
的功能也很很容易就明白了。
换句话说,是为了避免多余空格对单次数量的误判,书中给了标准答案,我加了点注释。
#include <stdio.h>
#define IN 1
#define OUT 0
main(void)
{
int c, state;
state = OUT; // 默认在单词外,进入else if 循环
while ((c = getchar()) != EOF) {
if (c == '\t' || c == ' ' || c == '\n') {
// 如果前面的字符非空格(前面是一个单词),输出换行符
if (state == IN) {
printf("\n");
state = OUT;
}
} else if (state == OUT) { // 如果输入不是if条件的三个 并且前面用三个断行 则新的单词开始记录
state = IN;
putchar(c);
} else // state == IN 的情况 输出单词内的字符
putchar(c);
}
return 0;
}
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。