通过键盘输入一串小写字母(a到z)组成的字符串。请编写一个字符串压缩程序(函数实现),将字符串中连续出席的重复字母(不超过9个)进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
实现字符串压缩功能,将以下程序片段填充完整:
int main()
{
char a[1000];//原始字符串
cin>>a;
int len;//字符串长度
char b[1000];//压缩后的字符串
stringZip(a,len,b);
cout<<b<<endl;
return 0;
}
void stringZip(const char *pInputStr, int lInputLen, char *pOutputStr){
//函数实现
}
输入
一个字符串(不超过1000个字符)
输出
压缩后的字符串
样例输入
cccddecc
样例输出
3c2de2c
#include <iostream>
#include <string.h>
using namespace std;
void stringZip(const char* plnputStr, int llnputLin, char* pOutputStr);
int main()
{
char a[1000];//原始字符串
cin >> a;
int len=strlen(a);//字符串长度
char b[1000];//压缩后的字符串
stringZip(a, len, b);
cout << b << endl;
return 0;
}
void stringZip(const char* pInputStr, int lInputLen, char* pOutputStr) {
int i = 0, j = 0;//i指向原始字符串中的字符下标,j指向压缩后的字符串中的字符下标
while (i < lInputLen) {
char current_char = pInputStr[i];//当前字符
int count = 1;//当前字符重复出现的次数,初始值为1
while (i + count < lInputLen && pInputStr[i + count] == current_char && count < 9) {//判断连续出现的字符是否超过了9个
count++;//累加重复的次数
}
if (count > 1) {//如果有重复字符
pOutputStr[j++] = count + '0';//把重复次数存入压缩字符串中
}
pOutputStr[j++] = current_char;//把当前字符存入压缩字符串中
i += count;//更新原始字符串中的下标
}
pOutputStr[j] = '\0';//压缩后的字符串要以'\0'结尾
}