首页 > 题库 > 职业考证 > 软考 > 程序员 > 案例题

阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。

函数strCompress(char *s)对小写英文字母串进行压缩,其基本思路是:如果串长小于3则不压缩,否则对连续出现的同一字符,用该字符及其个数来表示。例如,字符串"abbbcdddddddeeed"压缩后表示为"ab3cd7e3d"。
如图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[11];              //在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);
}

参考答案: 查看答案 查看解析 查看视频解析 下载APP畅快刷题

相关知识点试题

相关试卷