iNVAiN

博客园 首页 新随笔 联系 订阅 管理

先自己做了个版本,理清逻辑关系花了不少时间。不动笔脑子里来回绕,一动笔思路就清晰了,看来思维习惯得好好改一下。

#include <stdio.h>

void main(void)
{
    freopen("original.txt", "r", stdin);
    freopen("myVersion.txt", "w", stdout);
    int b, c;
    b = getchar();
    while ( ( c = getchar()) != EOF)
    {
        if (c == ' ' || c == '\t') {
            if (b == ' ' || b == '\t') {
                continue;
            }
            else {
                putchar(b);
            }
        }
        else {
            if (b == ' ' || b == '\t') {
                putchar('\n');
            }
            else {
                putchar(b);
            }
        }
        b = c;
    }
    putchar(b);
    fclose(stdin);
    fclose(stdout);
}

后来看到书上的例子,用状态转换来统计单词,学着做了个,感觉更简洁清晰

#include <stdio.h>
#define IN 1
#define OUT 0

void main(void)
{
    freopen("original.txt", "r", stdin);
    freopen("bookVersion.txt", "w", stdout);

    int c, state;
    state = IN;
    while ((c = getchar()) != EOF)
    {
        if (c == ' ' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
            putchar('\n');
            putchar(c);
        }
        else
            putchar(c);
    }
    fclose(stdin);
    fclose(stdout);
}

original.txt (貌似tab全部自动转成空格了,其实1~90之间的空格、tab搭配都不一样)

     1   2            3                    4                          56                                                        7a  kjj                     90
sdf                         234
由 xx 发表于 2011年10月20日 星期四 21:04

显示父帖子 | 回复
跳过 导航
C 语言程序设计

myVersion.txt & bookVersion.txt , 结果是一样的:

1
2
3
4
56
7a
kjj
90
sdf
234
由
xx
发表于
2011年10月20日
星期四
21:04

显示父帖子
|
回复
跳过
导航
C
语言程序设计

今天学会理清逻辑,学会使用状态转换的思维,复习了文件的打开函数、读写操作,stdin/stdout重定向。

 

 

posted on 2013-02-27 02:37  iNVAiN  阅读(196)  评论(0编辑  收藏  举报