给你一个字符串换行符分割字符串,用c++算法帮我分一下类,相同的字符串只保留一个,看有多少个不同字符,并从大到小排序 0x8768 0x1e08 0x86a0 0x807c 0x8768 0x1e08 0x86a0 0x807c 0x8768 0x1e08 0x86a0 0x807c 0x8768 0x1e08 0x86a0 0x807c 0x8768 0x1e08 0x86a0 0x807c 0x1e08 0x86a0 0x807c 0x1e08 0x86a0 0x807c 0x1e08 0x86a0 0x807c 0x1e08 0x86a0 0x807c 0x1e08 0x86a0 0x1e08 0x86a0 0x1e08 0x86a0 0x1e08 0x86a0 0x1e08 0x86a0 0x86a0 0x86a0 0x86a0 0x86a0
时间: 2024-01-05 10:02:59 浏览: 70
要分割字符串、去重并排序,你可以使用C++的`std::set`容器和自定义的比较函数。以下是一个示例代码:
```cpp
#include <iostream>
#include <string>
#include <sstream>
#include <set>
#include <map>
// 自定义比较函数,按照字符串出现次数从大到小排序
bool compare(const std::pair<std::string, int>& a, const std::pair<std::string, int>& b) {
return a.second > b.second;
}
int main() {
std::string input = "0x8768\n0x1e08\n0x86a0\n0x807c\n0x8768\n0x1e08\n0x86a0\n0x807c\n0x8768\n0x1e08\n0x86a0\n0x807c\n0x8768\n0x1e08\n0x86a0\n0x807c\n0x8768\n0x1e08\n0x86a0\n0x807c\n0x1e08\n0x86a0\n0x807c\n0x1e08\n0x86a0\n0x807c\n0x1e08\n0x86a0\n0x807c\n0x1e08\n0x86a0\n0x807c\n0x1e08\n0x86a0\n0x1e08\n0x86a0\n0x1e08\n0x86a0\n0x1e08\n0x86a0\n0x1e08\n0x86a0\n0x86a0\n0x86a0\n0x86a0\n0x86a0";
std::map<std::string, int> stringCount;
std::stringstream ss(input);
std::string line;
// 统计字符串出现次数
while (std::getline(ss, line, '\n')) {
stringCount[line]++;
}
// 将字符串和出现次数存入vector中
std::vector<std::pair<std::string, int>> stringCountVec(stringCount.begin(), stringCount.end());
// 按照出现次数从大到小排序
std::sort(stringCountVec.begin(), stringCountVec.end(), compare);
// 输出不同的字符串数量
std::cout << "不同的字符串有:" << stringCountVec.size() << "个" << std::endl;
// 输出排序后的字符串和出现次数
std::cout << "排序后的字符串和出现次数:" << std::endl;
for (const auto& pair : stringCountVec) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
```
在上面的代码中,我们使用`std::map`来统计每个字符串的出现次数,然后将字符串和出现次数存入`std::vector`中,最后使用自定义的比较函数来按照出现次数从大到小排序。
运行这个示例代码,你应该能够看到输出结果,其中包含不同的字符串数量以及按照字符串出现次数从大到小排序的结果。
希望这可以帮助到你!如果有任何其他问题,请随时提问。
阅读全文