练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
这道练习的意思是对于输入连续的空格在最后输出时只会显示一个空格,将问题看的简单一些便是当出现连续多个空格的输入时我们忽略它。我们定义一个变量保存上一次的输入字符,这样我们可以判断当前输入是空格而上一次的输入也是空格则我们应该忽略它。只有当前输入不是空格,或者上一次输入不是空格,当前输入是空格的时候则输出它(这样的条件出现在一个单词的输入第一个空格的时候,之后的所有空格都将被忽略)。另一种方法可以考虑设置一个标志位,表示在输入空格中则不输出任何空格直到下一个非空格字符出现,再一同输出一个空格和当前输入字符。
练习 1-9
使用保存上一次输入的字符的解法:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int c, lastc;
while ((c = getchar()) != EOF){
if (c != ‘ ‘ || lastc != ‘ ‘) putchar(c);
lastc = c;
}
system("PAUSE");
return 0;
}
int c, lastc;
while ((c = getchar()) != EOF){
if (c != ‘ ‘ || lastc != ‘ ‘) putchar(c);
lastc = c;
}
system("PAUSE");
return 0;
}
使用标志位标识的解法:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define FALSE 0
typedef short BOOL;
int main(int argc, char *argv[]){
int c;
BOOL flag = FALSE;
while ((c = getchar()) != EOF){
if (c == ‘ ‘) flag = TRUE;
else if (c != ‘ ‘){
if (flag) putchar(‘ ‘);
putchar(c);
flag = FALSE;
}
}
system("PAUSE");
return 0;
}
int c;
BOOL flag = FALSE;
while ((c = getchar()) != EOF){
if (c == ‘ ‘) flag = TRUE;
else if (c != ‘ ‘){
if (flag) putchar(‘ ‘);
putchar(c);
flag = FALSE;
}
}
system("PAUSE");
return 0;
}