如图4-1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串.." name="Keywords"> 如图4-1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串.." name="Description">
免费智能真题库 > 历年试卷 > 程序员 > 2022年上半年 程序员 下午试卷 案例
  第3题      

 
【说明】
函数strCompress(char *s)对小写英文字母串进行压缩,其基本思路是:如果串长小于3则不压缩,否则对连续出现的同一字符,用该字符及其个数来表示。例如,字符串
"abbbcdddddddeeed”压缩后表示为 Mab3cd7e3d"。
如图4-1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串中的字符,当s所指字符与其后的第k个字符不同时,一个重复字符串的压缩参数即可确定。

【C代码】
       #include<stdio.h>
       #include<string.h>
       #include<stdlib.h>
       void strCompress (char *) ;

       int main()
      {
            char test[] = "abbbcdddddddeeed"; 

            printf("%s\n", test);
      (1) ;   //调用strCompress实现test中字符串的压缩
            printf("%s\n", test);

            return 0;
       }

       void strCompress (char *str)
       {
       int i;
           char *p,tstr[ll] ;               //在tstr中以字符串方式表示同一字符连续出现的次数
           char *s = str,*buf;          //借助buf暂存压缩后的字符串

           if (strlen (str)<3)
                 return;

           buf = (char *)malloc(strlen(str)*sizeof(char)+1)
           if (!buf)
                 return;

           for( i = 0; *s;){
        int k = 1;                         //用k累计当前字符的连续出现次数

                  buf [ (2) ] = *s;     //先将当前字符写入buf []

                  if(s[1] &&*s==*(s+1)){
                        k++;
                        while ( (3) ) k++;

                        sprintf (tstr, ”%d", k) ;           //将k的值转换为数字串暂存在tstr中

                        //将暂存在tstr中的数字字符逐个写入buf []
                        p = tstr;
                        while ( *p )
                              buf[i++] = (4);
                      }
                      s += k;         //跳过连续出现的同一字符,使s指向下一个不同的字符
             }
            (5) = '\0';                    //设置字符串结尾
               strcpy (str, buf) ;           //将暂存在buf中的压缩字符串复制给原串

               free (buf);
            }
 
问题:3.1   (共15分)
阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。
 
 
 

   题号导航      2022年上半年 程序员 下午试卷 案例   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
 
第3题    在手机中做本题