将唯一值转移到左侧,并在字符串中删除重复的值
Shifting unique values to the left and removing duplicated values in a string
我正在尝试编写一个函数,该函数将唯一值在字符串中,将它们全部转移到左侧,然后将重复的值设置为一个空字符串。我希望我的功能返回将多少个值更改为一个空字符串。
我的数组是 {" 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);;
}
这可以简单地使用for
-loop中的remove
完成。
auto finish = end(duplicates1);
for(auto start = begin(duplicates1); start != finish; ++start) finish = remove(next(start), finish, *start);
fill(finish, end(duplicates1), string());
实时示例
上述解决方案保留顺序,但最快的解决方案将是sort
并使用unique
:
sort(begin(duplicates1), end(duplicates1));
fill(unique(begin(duplicates1), end(duplicates1)), end(duplicates1), string());
实时示例
跟进乔纳森·梅(Jonathan Mee(的答案,这是C 这样做的方法。
#include <algorithm>
int removeDuplicatedValues(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);;
}
从位置4删除第二熊后,第三熊移至该位置,然后您继续从位置5开始寻找熊,然后错过了它。尝试通过while
替换最后一个if
,以继续删除熊,然后再增加j
。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何从给定字符串中删除第二次和第三次出现的$
- 在C++的字符串中搜索和删除某些字符
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 使用另一个字符串从字符串中删除空格
- 删除/替换C++字符串中的多字符 (ÿû)
- 删除所有字符串后如何恢复 QStringList?
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 根据新的行分隔符从字符串中删除子字符串
- C ++,如何从控制台中输入的字符串中删除字母?
- 删除字符串后C++检测到堆损坏
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 如何在 c++ 中删除字符串中的某些字符?
- 删除字符串数组
- 删除字符串中具有相同值的任何相邻字母"pair"
- 高效的字符串截断算法,按顺序删除相等的前缀和后缀
- 如何使用双黑斜杠从字符串中删除单反斜杠
- 如何在编译时从string_view中删除子字符串?
- 从文件中读取多行.txt字符串删除空格并创建新文件进行输出
- c字符串 删除非字母/非空格字符 - C++