C 一行输出一个单词
貌似以前也看到有一道题是这样的,这里发现了思维不够严密,比如我是这么写的:
1#include <stdio.h>
2
3#define IN 1
4#define OUT 0
5
6main(void)
7{
8 int c, state;
9
10 while ((c = getchar()) != EOF) {
11 if (c == '\t' || c == ' ')
12 printf("\n");
13 else
14 putchar(c);
15 }
16
17 return 0;
18}
19
很显然,这样我们就没有办法对“多余空格”的情况做出恰当的处理,要结合C 删除多余空格的思路思考。这样一想,K&R中的1.5.4的state
的功能也很很容易就明白了。
换句话说,是为了避免多余空格对单次数量的误判,书中给了标准答案,我加了点注释。
1#include <stdio.h>
2
3#define IN 1
4#define OUT 0
5
6main(void)
7{
8 int c, state;
9
10 state = OUT; // 默认在单词外,进入else if 循环
11
12 while ((c = getchar()) != EOF) {
13 if (c == '\t' || c == ' ' || c == '\n') {
14 // 如果前面的字符非空格(前面是一个单词),输出换行符
15 if (state == IN) {
16 printf("\n");
17 state = OUT;
18 }
19 } else if (state == OUT) { // 如果输入不是if条件的三个 并且前面用三个断行 则新的单词开始记录
20 state = IN;
21 putchar(c);
22 } else // state == IN 的情况 输出单词内的字符
23 putchar(c);
24
25 }
26
27 return 0;
28}
29
30
评论 (0)