求助!C语言写法,感觉太麻烦了而且3和5测试点没有通过不知道什么原因
查看原帖
求助!C语言写法,感觉太麻烦了而且3和5测试点没有通过不知道什么原因
1400945
LAKCINE楼主2024/7/23 11:45
#include<stdio.h>
#include<string.h>
int main(){
	char s[200]={0};
	char a[100]={0};
	char b[100]={0};
	
	int loc1=0,loc2=0;
	int i=0,j=0;
	
	while((s[i++]=getchar())!='\n'){}
	scanf("%s",a);
	scanf("%s",b);
	
	char c[100]={};
	int len1=strlen(s);
	int len3=strlen(a);
	int len4=strlen(b);
	
	char s1[50][200]={};
	int count=0;
	
	if(len3==len4){
		for(i=0;i<len1;i++){
			if((s[i]==' ')||(s[i]=='\n')){
				loc2=i;//如果定位到i的话后续提出的单词前面会多个空格,相当于截取的是单词的前一个空格到单词的结尾,(结尾定位到空格不会影响截取是因为循环的范围是左闭右开的)
				for(j=loc1;j<loc2;j++){
					c[j-loc1]=s[j];
				}
				int temp=strcmp(c,a);
				if(temp==0){
					for(j=loc1;j<loc2;j++){
						s[j]=b[j-loc1];
					}
				}
				loc1=i+1;
				int len2=strlen(c);
				for(j=0;j<len2;j++){//选区清0
					c[j]=0;
				}
			}
		}
		printf("%s",s);
	}else if((len3>len4)||(len3<len4)){
		for(i=0;i<len1;i++){
			if((s[i]==' ')||(s[i]=='\n')){
				loc2=i;//如果定位到i的话后续提出的单词前面会多个空格,相当于截取的是单词的前一个空格到单词的结尾,(结尾定位到空格不会影响截取是因为循环的范围是左闭右开的)
				for(j=loc1;j<loc2;j++){
					c[j-loc1]=s[j];//从源字符串提取字母单独放在一个数组内进行比对;
				}
				int temp=strcmp(c,a);//用于判断选区字母与目标祖母是否匹配
				if(temp==0){
					strcpy(s1[count++],b);//匹配后将要替换字符串放到输出数组中
				}else{
					strcpy(s1[count++],c);//不匹配的也按顺序放入;
				}
				loc1=i+1;
				int len2=strlen(c);//选区清0
				for(j=0;j<len2;j++){
					c[j]=0;
				}
			}
		}
		for(i=0;i<count;i++){
			printf("%s ",s1[i]);
		}
	}
}



2024/7/23 11:45
加载中...