删除数组中的重复字符串

时间:2013-08-10 13:34:26

标签: c++ arrays string duplicates

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

2 个答案:

答案 0 :(得分:3)

如果订单无关紧要,您可以先使用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());

答案 1 :(得分:2)

如果您需要,请选择将其存储在std::set中。它会自动存储唯一的项目。

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