利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能 c++
时间: 2024-10-20 22:10:08 浏览: 24
在 C++ 中,我们可以利用字符串中字符的重复性质来实现简单的字符串压缩。这种压缩通常是通过计数每个连续字符的出现次数,并将其存储为一个更紧凑的形式。下面是一个简单的示例,使用了 `std::string` 和 `std::vector<char>` 来实现:
```cpp
#include <iostream>
#include <string>
#include <vector>
// 定义一个辅助结构体,用于存储字符和它的出现次数
struct CharCount {
char ch;
int count;
};
// 压缩字符串函数
std::string compressString(const std::string& input) {
std::vector<CharCount> compressed;
int prev_char = input[0], prev_count = 1;
for (size_t i = 1; i < input.length(); ++i) {
if (input[i] == prev_char) {
prev_count++;
} else {
// 将之前的字符和次数添加到压缩结果中
compressed.push_back({prev_char, prev_count});
prev_char = input[i];
prev_count = 1;
}
}
// 处理最后一个字符的重复次数
compressed.push_back({prev_char, prev_count});
// 构建压缩后的字符串
std::string result;
for (const auto& cc : compressed) {
result += cc.ch;
if (cc.count > 1) {
result += std::to_string(cc.count);
}
}
return result;
}
int main() {
std::string str = "aaabbbccc";
std::string compressed_str = compressString(str);
std::cout << "Original string: " << str << "\nCompressed string: " << compressed_str << "\n";
return 0;
}
```
在这个例子中,我们遍历输入字符串,遇到相同的字符就累加计数,遇到不同的字符则将前一个字符及其计数值添加到压缩结果中。最后返回的是压缩后的字符和它们对应的计数值的组合。
阅读全文