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

来源:互联网 发布:淘宝摄影棚实景布置图 编辑:程序博客网 时间:2024/05/20 13:37
字符串
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; }}

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


0 0
原创粉丝点击