先自己做了个版本,理清逻辑关系花了不少时间。不动笔脑子里来回绕,一动笔思路就清晰了,看来思维习惯得好好改一下。
#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重定向。