TCPL——练习1.9

  打算这段时间重新拜读TCPL这本经典著作,并把后面的习题都做一遍。结果,发现我的决定是多么的正确,多么有必要。

  原因在于下午一道练习题,很简单:编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格来表示。

  很简单,本来前几章的练习都不打算写,因为之前国庆回家正好带回了一本《The C Answer Book》,就打算写写然后看看答案。不假思索我就写了一个程序:

 

代码
#include <stdio.h>

#define FALSE 0
#define TRUE 1

int main(void)
{
int c;
int flag = FALSE;

while ((c = getchar()) != EOF)
{
if (flag == FALSE)
{
putchar(c);
if (c == ' ')
flag
= TRUE;
}
else
{
if (c != ' ')
{
flag
= FALSE;
putchar(c);
}
}
}
return 0;
}

这当然能正确运行。但是,我看TCAB,里面有3种简单的解法。地一种和我差不多,可是第三种明显简洁很多,真是相形见绌了。下面就是第三种方法:

 

 

代码
#include <stdio.h>

#define NONBLANK 'a'

int main(void)
{
int c, lastc;

lastc
= NONBLANK;
while ((c = getchar()) != EOF)
{
if (c != ' ' || lastc != ' ')
putchar(c);
lastc
= c;
}
return 0;
}

 

这个例子告诉再一次提醒我:永远不要小看一个简单的程序,里面蕴含的道理很有可能能影响到你以后的水平。程序就是要尽量简洁,虽然我们大家都明白这个道理,但是到了实际工作,你能保证你的程序永远都是那么简洁么?

 

posted @ 2010-10-31 17:59  Linjian  阅读(364)  评论(0编辑  收藏  举报