使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。函数fun将字符串s1和s2交叉合并形成新字符串s3,合并方法为:先取s1的第1个字符存入s3,再取s2的第1个字符存入s3,以后依次类推;若s

admin2018-10-20  27

问题 使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。函数fun将字符串s1和s2交叉合并形成新字符串s3,合并方法为:先取s1的第1个字符存入s3,再取s2的第1个字符存入s3,以后依次类推;若s1和s2的长度不等时,较长字符串多出的字符顺序放在新生成的s3后。
例如,当s1为:"123456789",s2为:"abcdefghijk"时,
输出结果应该是:1a263c4d5e6t7g8h9ijk
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
void fun(char*s1,char*s2,
char*s3)
{int i,j;
/*********found*********/
for(i=0,j=0;(s1!=’\0’)&&(s2!=’\0’);i++,j=j+1)
{s3[j]=s1
s3[j+1]=s2
}
if(s2!=’\0’)
(for(;s2!=’\0’;i++,
j++)
/*********found*********/
s3=s2[j];
}
else if(sl!=’\0’)
(for(;s1!=’\0’;i++,j++)
s3[j]=s1
)
/*********found*********/
s3[j﹣1]=’\0’;
}
void main()
{char s1[128],s2[128],s3[255];
printf("Please input string1:");
gets(s1);
printf("Please 2nput str2ng2:");
gets(s2);
fun(s1,s2,s3);
printf("string:%s\n",s3);
}

选项

答案(1)将for循环中的j=j+1改为j=j+2 (2)将s3[i]=s2[j]改为s3[j]:s2[i] (3)将s3[j﹣1]改为s3[j]

解析 (1)函数fun中,在两个字符串都未结束的情况下将s1[0]放入s3[0],将S2[0]放入s3[1],for循环将字符依次放入,即将s1放入s3[j],s2放入s3[j+1]中,每次循环数组s3中放入2个字符,所以循环变量j的变化为j=j+2;所以将for循环中的j=j+1改为j=j+2。
(2)当第一个循环结束后,数组s1或数组s2中仍然可能有字符没有存放至s3,根据题目要求,应该将其剩下的字符放入数组s3的尾部。使用for循环把s2放入s3,这里数组s3的下标应为j,所以应将s3=s2[j]改为s3[j]=s2
(3)当s1[]或s2[]的最后一个字符放入s3[j]时,应该设置一个结束标志,该结束标志’\0’应存入s3[j]最后一个位置。因为将最后一个字符放入s3[j]中后,j执行j++,将结束标志’\0’放入此时的s3[j]中,所以将s3[j﹣1]改为s3[j]。
转载请注明原文地址:https://jikaoti.com/ti/x1a0FFFM
0

最新回复(0)