字符串
第8题
第8题
【描述】
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
【输入】
输入包括若干行,每一行为一组测试数据,格式为
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;
}
}
解决方案:在循环内部设立新数组,来存放最终数组