删除重复出现的字符
Delete recurring characters
对于我在C++中尝试的一点东西,我接受了一个字符串(比如"西红柿是红色的")并去掉了空格('atomatoisred')。
现在,我将如何仅删除重复出现的字符,条件是该字符的第一个实例可以保留(因此我们的示例变为"atomisred")?
提前感谢!
您可以将擦除-删除习惯用语与一组跟踪重复字符结合使用:
std::set<char> dupes;
str.erase(
std::remove_if(
str.begin(), str.end(),
[&](char c) { return not dupes.insert(c).second; }),
str.end());
这也利用了这样一个事实,即 std::set::insert
的返回值是一对,其第二个元素是指示插入是否发生的bool
。
如果你想自己实现它(没有stl
),有很多方法。
-
通过排序。如果您不关心字符的顺序,这有效。首先对字符串进行排序,然后遍历它,对每个元素执行非常简单的检查:
if( currentElement == elemebtBeforeIt ) deleteCurrentElement
-
另一种方法是有一个专用于唯一字符的数组(好吧,也许不是数组,但你会明白的)。遍历字符串,对于每个字符,检查:
foreach Element of the string: if( arrayOfUniqueElements contains currentElement ) do nothing else put currentElement into the arrayOfUniquElements
在此之后,您将在专用数组中拥有所有唯一元素。
相关文章:
- 在C++的字符串中搜索和删除某些字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 如何在 c++ 中删除字符串中的某些字符?
- 从双引号括起来的子字符串中删除特定字符
- 如何从字符数组(不是字符串数组)中删除符号
- C++ 从 std::string 中删除所有非数字字符
- xcode 从源代码中删除奇怪的控制字符
- C++从句子中删除给定字符的程序不起作用
- 正在从C++中的字符数组中删除字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- C++从字符末尾删除值
- 从字符数组中删除双空格
- 循环以从字符数组中删除过多的空格 (C++)
- 如何删除新分配的字符,这也是函数返回值?
- 删除字符串向量中的字符重复
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除以前打印的字符
- 回文查找器:非字母数字字符删除问题