1

对于我在 C++ 中尝试的一些东西,我已经接受了一个字符串(比如'atomato is red')并去掉了空格('atomatoisred')。

现在我将如何只删除重复出现的字符,条件是该字符的第一个实例可以保留(所以我们的示例变为“atomisred”)?

提前致谢!

4

2 回答 2

7

您可以将擦除删除习语与一组跟踪重复字符一起使用:

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

于 2012-10-01T13:05:36.707 回答
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
    

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

于 2012-10-01T13:09:31.630 回答