3

我是 C++ 的新手,我正在寻找一种从字符串数组中删除重复字符串的方法,看起来像这样: string exempleArray[]= {"string1", "string2", "string1"}; 在代码之后它应该看起来像这样: "string1", "string2",但顺序根本不重要。非常感谢您的时间。

4

2 回答 2

4

如果顺序无关紧要,您可以先使用 对数组进行排序std::sort,然后使用std::unique删除重复项。

std::sort(std::begin(exampleArray), std::end(exampleArray));
auto it = std::unique(std::begin(exampleArray), std::end(exampleArray));

在这里,it指向新的唯一范围末尾的一个。请注意,由于您从固定大小的数组开始,因此不能将其大小减少到唯一元素的数量。您需要将元素复制到可以在运行时确定大小的容器中。std::vector<std:string>是一个明显的候选人。

std::vector<std::string> unique_strings(std::begin(exampleArray), it);

请注意,如果您从一个std::vector<std::string>而不是固定大小的数组开始,您将能够避免复制并从原始向量中删除元素:

std::vector<std::string> strings = {"string1" "string2" "string1"};
std::sort(strings);
auto it = std::unique(std::begin(strings), std::end(strings));
strings.erase(it, strings.end());
于 2013-08-10T13:35:51.597 回答
3

如果你想要这个,那么最好将它们存储在 a 中std::set。它将自动存储独特的项目。

或者,如果您已经拥有数组(或std::vector)并且由于某种原因无法使用std::set,那么请使用std::sort 后跟 std::unique来实现这一点。

于 2013-08-10T13:36:10.213 回答