您的位置:首页 > 其它

[K&R学习]单词记数

2012-09-11 00:00 141 查看
/*
* filename: wc.c
* function: UNIX系统中统计行数,字数及字节数
* date: 2012年 09月 11日 星期二 13:38:10 CST
*/
#include <stdio.h>

#define OUT			0	/* outside a word */
#define IN			1	/* inside a word */

int main(void)
{
int c, nl, nw, nc, state;

state = OUT;
nl = nw = nc = 0;

while((c = getchar()) != EOF){  /* 备注:EOF在linux下按Ctrl+D;Windows下按Ctrl+Z */
++nc;			/* character + 1 */
if(c == '\n')
++nl;
if(c == ' ' || c == '\t' || c == '\n')
state = OUT;
else if(state == OUT){
state = IN;
++nw;
}
}
printf("nl = %d, nw = %d, nc = %d\n", nl, nw, nc);

return 0;
}

以上代码摘自K&R的<<C程序设计语言>>.

大师的代码果然有启发性,连一句简单的if else都设计得如此巧妙.

在判断单词数加1时,若我的思路必然是先判断nw++(即ch != ... && (ch_pre == ...)

而大师的思路则恰好相反,将简单的逻辑放在if上而else + if构造出一个复杂逻辑的同时让代码更简洁

再加上状态判断state的利用,让代码如此简单而清晰,赞!

学习之......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: