通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
要求实现函数:
void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void stringZip(const char* pInputStr,long lInputLen,char* pOutputStr)
{
if(pInputStr==NULL||lInputLen<=0)
return;
int k=0;
int count=1;
char tmp=pInputStr[0];
for(int i=1;i<lInputLen;i++){
while(pInputStr[i]==tmp){
++count;
++i;
}
if(count==1)
pOutputStr[k++]=tmp;
else{
if(count>=10){
int numBit[10];
int t=0;
do{
numBit[t++]=count%10;
}while(count/=10);
for(int j=t-1;j>=0;j--){
pOutputStr[k++]=numBit[j]+'0';
}
}
else
pOutputStr[k++]=count+'0';
pOutputStr[k++]=tmp;
count=1;
}
tmp=pInputStr[i];
}
pOutputStr[k]='\0';
printf("%s",pOutputStr);
}
int main()
{
char* Instr="xxxxxxxxxxxxxyyyaaas";
long len=strlen(Instr);
char* Outstr=(char *)malloc(len+1);
stringZip(Instr,len,Outstr);
free(Outstr);
return 0;
}