c++去重string函数
时间: 2025-01-07 20:26:29 浏览: 4
### C++ 去除字符串中的重复字符
为了去除C++字符串中的重复字符,通常的做法不是调用现成的标准库函数,因为标准模板库 (STL) 中并没有直接提供这样的功能。然而,可以通过组合使用 STL 容器和算法轻松实现这一目标。
一种常见的方式是利用 `std::set` 或者 `std::unordered_set` 来存储已经遇到过的字符,从而自动过滤掉重复项。下面是一个具体的例子:
```cpp
#include <iostream>
#include <string>
#include <set>
std::string removeDuplicates(const std::string& input) {
std::set<char> seen;
std::string result;
for (char c : input) {
// 如果集合中不存在该字符,则添加到结果串并记录下来
if (seen.find(c) == seen.end()) {
result += c;
seen.insert(c);
}
}
return result;
}
int main() {
std::string str = "programming";
std::cout << "Original String: " << str << '\n';
std::cout << "String after removing duplicates: "
<< removeDuplicates(str) << '\n';
return 0;
}
```
上述代码通过遍历输入字符串并将每个新发现的字符加入到返回的结果字符串中来工作。这里使用的数据结构——`std::set`—确保了所有成员都是唯一的[^1]。
另一种更高效的方法是在不需要保持原始顺序的情况下使用 `std::sort()` 和 `std::unique()` 组合操作原地修改字符串:
```cpp
#include <algorithm>
#include <string>
#include <iostream>
void removeConsecutiveDups(std::string& s) {
if (!s.empty()) {
auto new_end = std::unique(s.begin(), s.end());
s.erase(new_end, s.end());
}
}
// 注意这只会移除连续相同的字符
int main(){
std::string text="aaabbbcccdddeeefffggg";
removeConsecutiveDups(text);
std::cout<<text<<"\n";
}
```
这段程序先对整个字符串进行了排序处理使得相同字符相邻排列,之后再应用 `std::unique()` 函数消除这些连续出现的副本[^2]。
阅读全文