这题可以使用模拟算法。
从左到右遍历字符串,用一个变量记录当前连续字符的个数。 当当前字符和下一个字符不同,或者已经遍历到字符串末尾时,说明这一段连续字符结束了,就把当前字符和它出现的次数拼接到结果中。
例如字符串 aaabbbcc:
编写一个函数,用于压缩一个字符串。压缩规则如下:连续出现的字符用字符和出现次数表示,例如 “aaabbbcc” 压缩为 “a3b3c2” 。如果压缩后的字符串长度大于或等于原字符串,则返回原字符串。
结合题干,请补全下面程序中 4 处"【】“框内缺失的代码,以实现该功能需求。答题后请保留"【】"框。
#include <iostream>
#include <string>
#include <sstream> // 用于 std::ostringstream
// 函数声明
std::string compressString(const std::string& str);
int main() {
// 测试用例
std::string test1 = "aaabbcc";
std::string test2 = "abc";
std::string test3 = "aabbcc";
// 输出测试结果
std::cout << "Test 1: " << compressString(test1) << std::endl; // 输出应为:"a3b2c2"
std::cout << "Test 2: " << compressString(test2) << std::endl; // 输出应为:"abc"
std::cout << "Test 3: " << compressString(test3) << std::endl; // 输出应为:"aabbcc"
return 0;
}
// 函数定义
std::string compressString(const std::string& str) {
if (str.empty()) return ""; // 如果字符串为空,直接返回空字符串
std::ostringstream compressed; // 用于构建压缩后的字符串
char lastChar = str[0];
int count = 1;
for (size_t i = 1; i < str.size(); ++i) {
if (【1】) {
++count;
} else {
compressed << lastChar << count;
【2】;
count = 1; // 重置计数
}
}
// 添加最后一个字符及其计数
【3】;
// 返回压缩后的字符串或原字符串
return 【4】;
}
本题属于以下题库,请选择所需题库进行购买