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;
}

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 成品, 源码, 题目

添加新评论