删除重复出现的字符

时间:2012-10-01 13:01:27

标签: c++ string character recurring

对于我在C ++中试用的一些东西,我已经接受了一个字符串(比如说'番茄是红色')并且摆脱了空格('atomatoisred')。

现在我将如何仅删除重复出现的字符,条件是该字符的第一个实例保留(因此我们的示例变为'atomisred')?

提前致谢!

2 个答案:

答案 0 :(得分:7)

您可以将erase-remove idiom与重复字符的设置保持一起使用:

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,表示插入是否发生。

答案 1 :(得分:0)

如果您想自己实施( stl),可以采取多种方式。

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

    if( currentElement == elemebtBeforeIt )
        deleteCurrentElement
    
  2. 另一种方法是有一个专门用于独特字符的数组(好吧,也许不是数组,但你会得到这个想法)。浏览你的字符串,对于每个字符,请检查:

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

    在此之后,您将拥有专用阵列中的所有唯一元素。