如图4-1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串.." /> 如图4-1所示,在计算连续出现的同一字符个数时,借助字符指针s和计数变量k表示串.." />
全部科目 > 程序员 >
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代码,填写程序中的空缺,将解答写入答题纸的对应栏内。




 
 



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有