在数据压缩中,一个常用的途径是行程长度压缩。对于一个待压缩的字符串而言,我们可以依次记录每个字符及重复的次数。这种压缩,对于相邻数据重复较多的情况比较有效。 例如,如果待压缩串为 AAABBBBCBB,则压缩的结果是 (A,3)(B,4)(C,1)(B,2)。当然,如果相邻字符重复情况较少,则压缩效率就较低。 现要求根据输入的字符串,得到大小写不敏感压缩后的结果(即所有小写字母均视为相应的大写字母)。用c++编写
时间: 2024-04-09 17:32:43 浏览: 165
可以使用C++编写一个函数来实现大小写不敏的行程长度压缩下面是一个示代码:
```cpp
#include <>
#include <string>
#include <vector>
stdvector<std::pair<char, int>> RunLengthCompression(const std::string& str) {
std::vector<std::pair<char, int>> compressed;
int count = 1;
char prevChar = std::toupper(str[0]);
for (int i = 1; i < str.length(); i++) {
char currChar = std::toupper(str[i]);
if (currChar == prevChar) {
count++;
} else {
compressed.push_back(std::make_pair(prevChar, count));
count = 1;
prevChar = currChar;
}
}
compressed.push_back(std::make_pair(prevChar, count));
return compressed;
}
int main() {
std::string input;
std::cout << "Enter a string: ";
std::getline(std::cin, input);
std::vector<std::pair<char, int>> compressed = RunLengthCompression(input);
std::cout << "Compressed result: ";
for (const auto& pair : compressed) {
std::cout << "(" << pair.first << "," << pair.second << ")";
}
return 0;
}
```
这段代码定义了一个名为`RunLengthCompression`的函数,它接受一个字符串作为输入,并返回一个存储压缩结果的`std::vector<std::pair<char, int>>`。首先,我们将输入字符串中的字符都转换为大写字母,然后遍历字符串进行压缩。在遍历过程中,我们比较当前字符和前一个字符是否相同,如果相同则计数器加1,否则将前一个字符及其对应的计数添加到压缩结果中,并将计数器重置为1。最后,将最后一个字符及其计数添加到压缩结果中。
在`main`函数中,我们从用户输入获取一个字符串,并调用`RunLengthCompression`函数进行压缩。最后,打印压缩结果。
请注意,这只是一个简单的示例,实际应用中可能需要添加更多的错误处理和输入验证。
阅读全文