删除重复出现的字符

Delete recurring characters

本文关键字:字符 删除      更新时间:2023-10-16

对于我在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),有很多方法。

  1. 通过排序。如果您不关心字符的顺序,这有效。首先对字符串进行排序,然后遍历它,对每个元素执行非常简单的检查:

    if( currentElement == elemebtBeforeIt )
        deleteCurrentElement
    
  2. 另一种方法是有一个专用于唯一字符的数组(好吧,也许不是数组,但你会明白的)。遍历字符串,对于每个字符,检查:

    foreach Element of the string:
        if( arrayOfUniqueElements contains currentElement ) 
            do nothing
        else
            put currentElement into the arrayOfUniquElements
    

    在此之后,您将在专用数组中拥有所有唯一元素。