string的去重函数c++
时间: 2024-07-14 14:00:48 浏览: 76
在C++中,没有内置的`string`类去重函数,但你可以自定义一个函数来实现这个功能。这里是一个简单的示例,使用STL中的`std::set`容器,因为`set`自动去重:
```cpp
#include <iostream>
#include <string>
#include <set>
// 自定义去重函数
std::string removeDuplicates(const std::string& input) {
std::set<char> uniqueChars;
std::string result;
for (char c : input) {
if (uniqueChars.insert(c).second) { // 如果插入成功,说明字符首次出现
result.push_back(c);
}
}
return result;
}
int main() {
std::string input = "hello world";
std::string uniqueString = removeDuplicates(input);
std::cout << "Original string: " << input << std::endl;
std::cout << "Unique string: " << uniqueString << std::endl;
相关问题
C++ 自定义类型的vector 去重
可以使用STL库中的`std::unique`函数对自定义类型的`vector`进行去重操作。但是在使用前需要定义一个比较函数(operator==),用于比较两个自定义类型是否相等。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Person {
string name;
int age;
};
bool operator==(const Person& p1, const Person& p2) {
return (p1.name == p2.name && p1.age == p2.age);
}
int main() {
vector<Person> persons = {{"Alice", 18}, {"Bob", 20}, {"Alice", 18}, {"Cathy", 22}, {"Bob", 20}};
sort(persons.begin(), persons.end()); // 先排序,保证相同元素相邻
auto iter = unique(persons.begin(), persons.end());
persons.erase(iter, persons.end()); // 删除重复元素
for (const auto& person : persons) {
cout << person.name << " " << person.age << endl;
}
return 0;
}
```
在这个例子中,我们定义了一个`Person`结构体,包含姓名和年龄两个成员变量。我们重载了`operator==`,在比较两个`Person`对象是否相等时,只有当它们的姓名和年龄都相等时才返回true。然后我们定义了一个`vector<Person>`类型的`persons`,其中包含了一些重复的`Person`对象。我们首先对`persons`进行了排序,这样相同的元素就相邻了。然后我们调用`unique`函数,它会返回一个指向第一个重复元素的迭代器,我们用这个迭代器来删除重复元素。最后我们遍历`persons`,输出结果。
注意:这个方法只能去除相邻的重复元素,如果有多个相同的元素分散在不同位置,就不能完全去重。如果需要完全去重,可以使用哈希表等数据结构实现。
C++ 删除vector<string>容器中重复的字符串
可以使用STL算法库中的`std::unique`函数来删除vector<string>容器中的重复元素。
具体步骤如下:
1. 首先对vector容器进行排序,以便后续去重操作。
2. 然后使用`std::unique`函数对容器进行去重操作,并返回去重后的尾部迭代器。
3. 最后使用vector容器的`erase`函数将去重后的元素从容器中删除。
下面是示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<string> vec{"hello", "world", "hello", "cpp", "world"};
sort(vec.begin(), vec.end()); // 对vector容器进行排序
auto end_unique = unique(vec.begin(), vec.end()); // 去重操作,并返回去重后的尾部迭代器
vec.erase(end_unique, vec.end()); // 删除重复的元素
for(auto& str : vec)
cout << str << " ";
cout << endl;
return 0;
}
```
输出结果为:`cpp hello world`
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)