压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
//注意,当个数不是1位数时,需要特殊处理一下。
#include <iostream>
using namespace std;
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){
const char *tmp=pInputStr;
const char *tmp2=pInputStr+1;
char *output=pOutputStr;
while(*tmp!='\0'){
if(*tmp!=*tmp2)
{
int dif= tmp2-tmp;
//这一段是为了处理如果有100位a,超过1位数的压缩字符串。
if(dif>1){ //大于1是因为,如果1的话,就不打印1
int num=dif;
int count=0;
while(num){
count++;
num=num/10;
}
output+=count-1;
while(dif){
int mod =dif%10;
*output= '0'+mod;
output--;
dif= dif/10;
}
output+=count+1;
}
*output++ =*tmp;
tmp = tmp2++;
} else {
tmp2++;
}
}
*output='\0';
}
int main(){
char* src="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbccc";
// char* src="aaaaaaaaabbbccc";
// char* src="pppppppp";
// char* src="cccddecc";
char* des=new char[strlen(src)+1];
stringZip(src,strlen(src),des);
cout<<des;
delete[] des;des = NULL;
system("pause");
return 0;
}