Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除重复字符 对于我在C++中尝试的一点小事情,我接受了一个字符串,说“番茄是红色的”,并且去掉了空间“原子化”。_C++_String_Character_Recurring - Fatal编程技术网

删除重复字符 对于我在C++中尝试的一点小事情,我接受了一个字符串,说“番茄是红色的”,并且去掉了空间“原子化”。

删除重复字符 对于我在C++中尝试的一点小事情,我接受了一个字符串,说“番茄是红色的”,并且去掉了空间“原子化”。,c++,string,character,recurring,C++,String,Character,Recurring,现在,我如何只删除重复出现的字符,条件是该字符的第一个实例保持不变,使我们的示例变成“原子红色” 提前谢谢 您可以将与用于跟踪重复字符的集合结合使用: 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<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,指示是否进行了插入。

您可以将与跟踪重复字符的集合结合使用:

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
在此之后,您将拥有专用阵列中的所有唯一元素


如果您想在没有stl的情况下自己实现它,有很多方法

通过分类。如果你不在乎字符的顺序,这就行了。首先对字符串进行排序,然后进行检查,对每个元素执行非常简单的检查:

if( currentElement == elemebtBeforeIt )
    deleteCurrentElement
另一种方法是使用一个专用于唯一字符的数组,也许不是数组,但你会明白的。检查字符串,并为每个字符选中:

foreach Element of the string:
    if( arrayOfUniqueElements contains currentElement ) 
        do nothing
    else
        put currentElement into the arrayOfUniquElements
在此之后,您将拥有专用阵列中的所有唯一元素


可能会有帮助。@chris:不会的。请仔细阅读说明:从范围中删除所有连续的重复元素[第一个,最后一个。@nightcracker,我忘记了那个条件。排序对以下问题不起作用:p@chris:不完全是。阅读合同。这是一个面试问题吗?如果是的话,在编程面试中对这个问题的讨论相当多:Mongan、Kindler和Giguère找到下一份工作的秘密。我不去g将其插入此处,但我也不会剽窃它。这可能会有所帮助。@chris:不会的。请仔细阅读说明:从范围中删除所有连续的重复元素[第一个,最后一个。@nightcracker,我忘记了那个条件。排序对以下问题不起作用:p@chris:不完全是。阅读合同。这是一个面试问题吗?如果是的话,在编程面试中对这个问题的讨论相当多:Mongan、Kindler和Giguère找到下一份工作的秘密。我不去g将其插入此处,但我也不会剽窃它。您对逻辑运算符使用ISO646避免替代名称吗?@Steve是的,一贯如此。更具可读性的IMHO。我们在Programmers.SE上对此进行了一些讨论,显然现在已删除。我不能反对,因为我目前正在编写Python。您使用ISO646避免替代名称逻辑运算符的名称?@Steve是的,一致。更具可读性的IMHO。我们在Programmers.SE上对此进行了一些讨论,显然现在已删除。我不能反对,因为我目前正在编写Python。