(算法练习)——单词替换(存疑)

要求:
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));
             
        }
    }
         
}
 
发布了105 篇原创文章 · 获赞 3 · 访问量 1974

猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/103960261