压缩规则:
1、仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压缩后的字符串还是”abcbc”。
2、压缩字段的格式为”字符重复的次数+字符”。例如:字符串”xxxyyyyyyz”压缩后就成为”3x6yz”。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN 100
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int len = 0;
for(int i=0,j=1;i<lInputLen;i=j++)
{
while(pInputStr[i] == pInputStr[j])
++j;
if(j-i>1)
{
sprintf(pOutputStr+len,"%d",j-i);
len += strlen(pOutputStr+len);
}
pOutputStr[len++] = pInputStr[i];
}
pOutputStr[len] = '\0';
}
int main()
{
char pInputStr[LEN];
char pOutputStr[LEN];
printf("please input the string:\n");
scanf("%s",pInputStr);
stringZip(pInputStr, strlen(pInputStr), pOutputStr);
printf("%s\n",pOutputStr);
printf("%d\n",strlen(pOutputStr));
return 0;
}