要求:
http://codeup.cn/problem.php?cid=100000580&pid=3
说明:
这一题更好的方案应该是像书上代码那样,用gets读入一行,再切成几个单词的数组,再比较是否相当
but,俺想用scanf死磕,结果当然是有问题。。。下面是有问题的代码,哪天想到了解决方案再来解决(这只能实现一组,而且第一行之后就要输ctrl+z)
(见第二份已修改通过的代码)
代码:(有问题)
#include <stdio.h>
#include <string.h>
//此代码未处理好一边输入一边记录的问题,以及之后换行,归根到底是scanf以空格为标志结束
char str[100][100];
int main(){
int symbol = 0;
int signal = 0;
char str1[10];
char str2[10];
while(scanf("%s",str[signal]) != EOF){
signal++;
}
scanf("%s",str1);
scanf("%s",str2);
for(int i = 0;i <signal;i++){
if(strcmp(str[i],str1) == 0){
strcpy(str[i],str2);
}
printf("%s ",str[i]);
}
}
代码已修正:(使用getchar检测是否读到了换行,然后再用if判断,这样一边录入一边循环就不影响了~~完美~已通过)
#include <stdio.h>
#include <string.h>
//已修正,使用getchar检测是否读到了换行
char str[110][110];
int main(){
int symbol = 0;
int signal = 0;
char str1[110];
char str2[110];
while(scanf("%s",str[signal]) != EOF){
signal++;
if(getchar() == '\n'){
scanf("%s",str1);
scanf("%s",str2);
//printf("signal=%d\n",signal);
for(int i = 0;i <=signal;i++){
if(strcmp(str[i],str1) == 0){
strcpy(str[i],str2);
}
printf("%s ",str[i]);
}
printf("\n");
//必须要重置
signal = 0;
memset(str,0,sizeof(str));
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
}
}
}