对于我在 C++ 中尝试的一些东西,我已经接受了一个字符串(比如'atomato is red')并去掉了空格('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
在此之后,您将拥有专用数组中的所有唯一元素。