我正在尝试编写一个函数,该函数采用字符串中的唯一值,将它们一起向左移动,然后将重复的值设置为空字符串。我希望我的函数返回有多少值被更改为空字符串。
我的数组是 { "cindy", "sasha", "cindy", "daisy", "bear", "bear", "bear"};但我的代码似乎跳过了“熊”一次,只返回 2。
例如,我不能这样做
int duplicaterase(string array[], int n)
{
const auto end = array + n;
auto finish = end;
for (auto start = array; start != finish; ++start) {
finish = std::remove(start+1, finish, *start);
}
std::fill(finish, end, std::string());
return static_cast<int>(end - finish);;
}
最佳答案
这可以简单地使用 remove
来完成在 for
循环中:
auto finish = end(duplicates1);
for(auto start = begin(duplicates1); start != finish; ++start) finish = remove(next(start), finish, *start);
fill(finish, end(duplicates1), string());
上述解决方案保留了顺序,但真正最快的解决方案是排序
并使用unique
:
sort(begin(duplicates1), end(duplicates1));
fill(unique(begin(duplicates1), end(duplicates1)), end(duplicates1), string());
关于c++ - 将唯一值左移并删除字符串中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837827/