[K&R学习]单词记数

/*
 * 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的利用,让代码如此简单而清晰,赞!

学习之......

你可能感兴趣的:([K&R学习]单词记数)