阅读以下说明和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);
}