题目:练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
我的脑残代码1(错误滴!):
#include<iostream>
#include<cstdio>
using namespace std;
int c,state;
int main()
{
state = 1;
while((c = getchar()) != EOF)
{
if(c == ' ' && state)
{
putchar(c);
state = 0;
}
else
{
putchar(c);
state = 1;
}
}
return 0;
}
这个代码有个致命的错误,如果if的条件判断失败。那么是否c就不等于' '(空格)捏?当然不是。。。
因为if成立的条件是c为空格并且state为1。然而当第一个' '(空格)出现后,state为0。当第二个连续的空格被读进来时,state为0。执行else的putchar(c),空格依然被输出!
所以,在else里应该在加一个判断,if(c != ' ')。
我的脑残代码2(写的真叫一个难看!):
#include<iostream>
#include<cstdio>
using namespace std;
int c,state;
int main()
{
state = 1;
while((c = getchar()) != EOF)
{
if(c == ' ' && state)
{
putchar(c);
state = 0;
}
else
if(c != ' ')
{
putchar(c);
state = 1;
}
}
return 0;
}
下面再看看书上的答案(那是多么的优美!):
#include<iostream>
#include<cstdio>
using namespace std;
#define NONBLANK 'a'
int c,lastc;
int main()
{
lastc = NONBLANK;
while((c = getchar()) != EOF)
{
if(c != ' ')
putchar(c);
else
if(lastc != ' ')
putchar(c);
lastc = c;
}
return 0;
}