压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
这里我是用C++语言实现的:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char str[100];//定义input字符串
char new_str[100]; //定义output字符串
cin.getline(str,100);//输入
int k = 0;//记录新字符串的index
for(int i = 0; i < strlen(str) ; i++ ){
char temp = str[i];
int i_temp = i ;
int j = 1;
while (i < strlen(str) ){
if (str[++i_temp] != temp)
{
break;//若后一个字符与当前字符不同,直接break
}
else
j++; //记录字符相同的个数
}
if ( j > 1){//判断个数是否大于0
new_str[k++] = '0'+j; //把整型数转成字符
new_str[k++] = str[i];
i = i +( --j);//input字符串下标应置为i +( --j)
}
else
new_str[k++] = str[i];
}
new_str[++k] = '\0'; //新字符串尾部加多个字符串结束符
cout<<new_str<<endl;
return 0;
}
PS:这里有个问题,若相同字符超过了9,那么由于输出的是ASCII码,当相同字符为10个时,便会输出“:”,11个时,输出为“;”。。。
希望大神给予改进建议,谢谢。