|
|
【说明】
函数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代码,填写程序中的空缺,将解答写入答题纸的对应栏内。
|
|
|
|
|
|