描述 一行小写字母,对其进行简化,连续相同的字母简化成字母和个数的形式。 输入描述 1 <= len <= 1000, 只包含小写字母。 输出描述 简写后的字符串, 只有一个字母不输出个数。请帮我做这道题用c++做
时间: 2024-10-29 22:17:01 浏览: 46
SL-ST 差速器3D模型 SL-ST 差速器
这是一个常见的字符串处理题目,通常涉及到字符串的压缩操作。在C++中,你可以通过遍历输入字符串并使用计数排序的方式来实现这个功能。以下是简单的步骤:
1. 初始化一个字符数组 `count` 来存储每个字符及其对应的出现次数,长度等于字符集大小(这里是26,因为只考虑小写字母)。
2. 遍历输入字符串,对于每一个字符,更新 `count` 数组中的对应值。
3. 创建一个新的结果字符串,然后遍历 `count` 数组。对于每个非零计数的字符,添加字符和其出现次数到结果字符串(如 "a5" 表示 'a' 出现了5次)。如果遇到连续的相同字符,只需要在第一次添加字符后,后续直接增加计数即可。
4. 当所有字符都处理完后,将结果返回。
下面是一个基本的C++代码实现:
```cpp
#include <iostream>
#include <vector>
std::string compress_string(std::string s) {
std::vector<char> count(26, 0); // 存储字符计数
int prev = 0;
for (int i = 1; i < s.length(); ++i) {
if (s[i] == s[prev]) {
count[s[prev] - 'a']++;
} else {
if (prev != 0) {
s[prev] = char(s[prev] - 'a') + '0';
s[prev+1] = std::to_string(count[s[prev]-'a']);
prev += 2;
}
count[s[i] - 'a'] = 1;
}
}
// 处理最后一个字符
if (prev != 0) {
s[prev] = char(s[prev] - 'a') + '0';
s[prev+1] = std::to_string(count[s[prev]-'a']);
}
return s;
}
int main() {
std::string input;
std::getline(std::cin, input);
std::string result = compress_string(input);
std::cout << result << std::endl;
return 0;
}
```
阅读全文