题目描述:
字符串压缩,比如xxxxxdddfff,输出x5d3f3
算法思路:
设置一个索引,一个计数器,依次将当前的字符和前一个进行比较,如果相同,则计数器自增,索引后移;如果不同,将当前的字符加入到压缩字符中,并加入计数器的数字,然后计数器重置。
#include
#include
using namespace std;
string compress(string str) {
//定义一个新字符串存储压缩的字符串
string cstr;
int i = 1, count = 1;
//令压缩字符串初始为字符串的第一个元素
cstr = str[0];
while (str[i] != '\0') {
//如果碰到不同的元素,就让压缩字符串更新,同时令计数器重新变为1
if (str[i] != str[i - 1]) {
cstr += char(count + '0');
cstr += str[i];
count = 1;
}
else {
//如果碰到相同元素,则计数器自增
count++;
}
//指针后移
i++;
}
//最后压缩字符串更新最后一个数字
cstr += char(count + '0');
return cstr;
}
int main() {
string str;
cout <> str;
string cstr = compress(str);
cout << cstr << endl;
return 0;
}
运行测试结果: