来源于《The C Programming Language》的一道习题(P13,PR1-9):
编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替
自己实现:
#include <stdio.h>
int main()
{
int c, flag;
flag = 0;
while((c = getchar()) != EOF)
if(c == ' ' && flag == 0)
{
putchar(c);
++flag;
}
else if(c == ' ' && flag != 0)
++flag;
else
{
flag = 0;
putchar(c);
}
return 0;
}
参考代码:
#include <stdio.h>
#define NONBLANK 'a'
int main()
{
int c, lastc;
lastc = NONBLANK;
while((c = getchar()) != EOF)
{
if(c != ' ')
putchar(c);
if(c == ' ')
if(lastc != ' ')
putchar(c);
lastc = c;
}
return 0;
}
比较两段代码,发现自己的代码还是嫩了些:
1. 对于flag变量,有点幻数的感觉(不知道这个比喻恰不恰当,哈哈),当别人在读代码时,不能一眼看出它的含义,而参考代码中
使用的宏NONBLANK就不存在这方面的问题。
2. 在程序主体结构中,对于判断条件的组织及if else语句的使用上,没有参考代码中的简洁和高效