插入字符串(不知道哪里错了)

字符串
8

【描述】

有两个字符串strsubstrstr的字符个数不超过10substr的字符个数为3。将substr插入到strASCII码最大的那个字符后面,若有多个最大则只考虑第一个。

【输入】

输入包括若干行,每一行为一组测试数据,格式为

str substr

【输出】

对于每一组测试数据,输出插入之后的字符串。

【输入示例】

abcab eee

12343 555

【输出示例】

abceeeab

12345553




#include<stdio.h>
#include<string.h>

int main(){
	char str[100]={0},substr[4];
	int i,l,max,j,t=0;
	char ch=0;
	while(scanf("%s",str)!=EOF&&scanf("%s",substr)!=EOF){
	l=strlen(str);
	str[l]=0; 
	str[l+3]='\0';           //可以用这种赋值\0的方式设置断点! 

	for(i=0;i<l;i++){
		if(str[i]>ch){
			ch=str[i];
			max=i;
			}
	}   //小心,!!!这里的i已经没用了,下面要用max! 
	for(j=max+4;j<l+3;j++){    //这里原来变成了j<max+6,这样就只是三个元素后移三位了! 
								//为什么输入azabcdef 222时,会错误输出az222abcabc 
		str[j]=str[j-3];
	}
	for(j=max+1;j<=max+3;j++){
		str[j]=substr[t];
		t++;
	}
	printf("%s\n",str);
	t=0;
	ch=0;   //一开始t,和ch都忘记初始化了!! 
	max=0; 
	}
}


<span style="font-size:32px;">
</span>
相似度0.89 

未知错误!



//思路2,/* 先输出str前半部分,再输出substr,最后输出str后半部分 */ 

#include<stdio.h>
#include<string.h>

int main(){
	char str[15],substr[4];
	int i,l,max,j,t=0;
	char ch=0;
	while(scanf("%s",str)!=EOF&&scanf("%s",substr)!=EOF){
	l=strlen(str);
	for(i=0;i<l;i++){
		if(str[i]>ch){
			ch=str[i];
			max=i;
			}
	}   //小心,!!!这里的i已经没用了,下面要用max!
	for(i=0;i<=max;i++){
		printf("%c",str[i]);
	}
	printf("%.3s",substr);
	for(i=max+1;i<l;i++){     //i<l一开始变成了i<=max+3 
		printf("%c",str[i]);}
	printf("\n");  //不要把换行加到上面循环中,那样会输出多个换行 
	ch=0;
	
}
return 0;
}

正确



解决了

#include<stdio.h>
#include<string.h>

int main(){
	char str[100]={0},substr[4];
	int i,l,max,j,t=0;
	char ch=0;
	while(scanf("%s",str)!=EOF&&scanf("%s",substr)!=EOF){
		char str2[100];
	l=strlen(str);
	str[l]=0; 
	str2[l+3]='\0';           //可以用这种赋值\0的方式设置断点! 

	for(i=0;i<l;i++){
		if(str[i]>ch){
			ch=str[i];
			max=i;
			}
	}   //小心,!!!这里的i已经没用了,下面要用max! 
	for(j=max+4;j<l+3;j++){    //这里原来变成了j<max+6,这样就只是三个元素后移三位了! 
								//为什么输入azabcdef 222时,会错误输出az222abcabc 
		str2[j]=str[j-3];
	}
	for(j=max+1;j<=max+3;j++){
		str2[j]=substr[t];
		t++;
	}
	for(j=0;j<=max;j++){
		str2[j]=str[j];
	}
	printf("%s\n",str2);
	t=0;
	ch=0;   //一开始t,和ch都忘记初始化了!! 
	max=0; 
	}
}

问题原因:字符串的长度不是简单地通过+ - 可以修改的
解决方案:在循环内部设立新数组,来存放最终数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值