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

admin2018-03-27  23

问题 使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。函数fun将字符串s1和s2交叉合并形成新字符串s3,合并方法为:先取s1的第1个字符存入s3,再取s2的第1个字符存入s3,以后依次类推;若s1和s2的长度不等时,较长字符串多出的字符顺序放在新生成的s3后。
  例如,当s1为:’’123456789’’,s2为:’’abcdefghijk’’时,
  输出结果应该是:1a2b3c4d5e6f7g8h9ijk
  请改正函数fun中指定部位的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
  #include<stdio.h>
  #include<string.h>
  #ragma 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(s1!=’\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 input string2:’’);
    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中,在两个字符串都未结束的情况下将sl[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://kaotiyun.com/show/6qID777K
0

最新回复(0)