对于我在C ++中试用的一些东西,我已经接受了一个字符串(比如说'番茄是红色')并且摆脱了空格('atomatoisred')。
现在我将如何仅删除重复出现的字符,条件是该字符的第一个实例保留(因此我们的示例变为'atomisred')?
提前致谢!
答案 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
),可以采取多种方式。
通过排序。如果你不关心字符的顺序,这是有效的。首先对字符串进行排序,然后对其进行排序,对每个元素执行非常简单的检查:
if( currentElement == elemebtBeforeIt )
deleteCurrentElement
另一种方法是有一个专门用于独特字符的数组(好吧,也许不是数组,但你会得到这个想法)。浏览你的字符串,对于每个字符,请检查:
foreach Element of the string:
if( arrayOfUniqueElements contains currentElement )
do nothing
else
put currentElement into the arrayOfUniquElements
在此之后,您将拥有专用阵列中的所有唯一元素。