阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个

admin2009-02-15  80

问题 阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。
   【程序说明】
   该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。
   【程序】
    #include <stdio.h>
   void strmerge(char *a,char *b,char *c)            //将字符串a,b合并到字符串c
   {
     char t,*w;
     W=c;
      while(  (1)  )
     {
     //找到字符串a,b当前字符中较小的字符
       if(*a<*b)
        {
          t=-*a,
           (2)  
        }
       else if(*a>*b)
        {
          t=*b;
           (3)  
        }
       else                     //字符串a,b 当前字符相等
        {
          t=-*a;
          a-H-;
          b-H-;
        }
       if(  (4)  )      //开始,可直接赋值
          *w=t;
       else if(t!=*w)
       //如果a,b中较小的当前字符与c中当前字符不相等,才赋值
         (5)  
     }
     if(*a!=’\O’)                   //如果字符串a还没有结束,则将a的剩余部分赋给c
     while(*a!=’\0’)
       if(*a!=*w)
       {
          *(++w)=*a;
          a++;
        }
       else
         (6)  
     if(*b!=",’\0’)                //如果字符串b 还没有结束,则将 b 的剩余部分赋给 c
     while(*b !=’\0’)
       if(*b!=*w)
        {
          *(++w)=*b;
          b++;
         }
       else
          b++;
           (7)  
      }
      void strsort(char *s)                 //将字符串 s 中的字符排序
     {
        int i,j,n;
        char t,*w;
        w=s;
        for(n=O;*w!=’\O’;n++)            //得到字符串长度 n
          w++;
        for(i=O;i<n-1;i++)             //对字符串 s 进行排序,按字母先后顺序
          forO=i+ 1 ;j<n;j++)
             if(  (8)  
                {
                  t=s;
                  s=s[j];
                   (9)  
                }
        }
     void mainO
     {
       char s1 [100],s2[100],s3[100];
       prinff("\nlPlease input the first string:");
       scanfC("% s",s1 );
       prinff("\nPlease input the second string:");
       scanf("%s",s2);
       strsort(s1);                       //将字符串s1 排序
       strson(s2);                       //将字符串 s2 排序
       prinff("%s\n’,s1);
       printfC % sW’,s2);
       s3[0]=’\O’;                     //字符串 s3 的第一个字符先置’\0’结束标志
         (10);          //将s1和s2合并,按照字母顺序排列,
        prinff("%s",s3);
     }

选项

答案(1)(*a!=’\0\)&&(*b!=’\0’) (2)a++ (3)b++ (4)*w==’\0’ (5)*(++w)=t (6)a++ (7)*(++w)=’\0’ (8)s[i]>s[j] (9)s[j]=t (10)strmerge(s1,s2,s3)

解析 根据题意,对字符串的处理分为三步:第一步是从键盘上输入两个字符串:第二步是将两个字符串分别排序;第三步是将字符串合并;第四步是显示处理结果。
   第一步和第四步容易实现,关键是第二步和第三步的处理,下面分别加以说明。
   字符串排序是指将一个字符串中各个字符按照ASCII码值的大小排序。例如,字符串“Beijing”由小到大的排序结果应该是:”Bejiign"。排序算法很多,第二个例子,我们就要介绍快速排序算法。在这里使用简单的冒泡排序算法:即将字符串中的每一个字符一个个进行比较,找出最小的字符,然后再在剩下的字符中找最小的字符。例如,字符“Beijing”的排序过程如下:
   第一次将字符“Beijing”中的每一个字符:’B’、’e’、’i’、’j’、’i’、’n’、’g’进行比较,找到最小的字符’B’。
   第二次在剩下的字符’e’、’i’、’j’、’n’、’g’中,找到最小的字符’e’。
   第三次在剩下的字符’i’、’j’、’i’、’n’、’g’中,找到最小的字符’j’。
   第三步是合并字符串,合并后的字符串仍然由小到大排序。由于待合并的两个字符串已经排好序。假定两个排好序的字符串分别为A和B,合并后的字符串为巴要使待合并后的字符串仍然由小到大排序,可采取下述步骤:
   1.从前往后取A中的字符,并按从前往后的顺序与B中的字符比较,若A中的字符较小,则将该字符存入C,并移到A的下一个字符,继续与B中的字符比较。
   2.若A中的字符较大,则将B中的字符存入C,并移到B的下一个字符,继续与A中的字符比较。
   3.若A与B中的字符相等,则将A或B中的字符存入C并将A和B均移到下一个字符。
   4.若A或B字符串到达末尾,则将B或A的剩余部分加到字符串C中。
   需要注意的是:A、B和C三个字符串均可以用字符数组来表示,C数组的长度不能小于A、B两数组的长度之和。另外,判别字符串是否结尾的方法是:从A或B中取出的字符是否为’\0’,所有字符串都是以’\0’结尾的。
转载请注明原文地址:https://kaotiyun.com/show/hwDZ777K
0

最新回复(0)