第一种方法:记录前一个 两个均为空格则不打印
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,c;
a=0;
while((c=getchar())!=EOF)
{
if((a!=' ')||(c!=' ')) printf("%c",c);
a=c;
}
return 0;
}
第二种方法:类似的 设置一个标志变量记录上一个是不是空格
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c;
int last_is_space=0;
while((c=getchar())!=EOF)
{
if(c==' ')
{
if(!last_is_space) putchar(c);
last_is_space=1;
}
else
{
putchar(c);
last_is_space=0;
}
}
return 0;
}
第三种 出现第一个之后 把后边的全部抵消
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c;
while((c=getchar())!=EOF)
{
if(c==' ')
{
putchar(c);
while((c=getchar())!=EOF&&c==' ');
putchar(c);
}
else putchar(c);//有错误 如果是一堆空格之后再来一个break会怎样?程序不会按时退出!
}
return 0;
}
工程师答案:
//Stig writes: "I am hiding behind the fact that break is mentioned in the introduction"!
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF)
{
if (c == ' ')
{
putchar(c);
while ((c = getchar()) == ' ' && c != EOF)
;
}
if (c == EOF)
break; /* the break keyword is mentioned
* in the introduction...
* */
putchar(c);
}
return 0;
}