私が C++ で試していたちょっとしたことについては、文字列 ('a tomato 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
これは、 の戻り値がペアであり、その 2 番目の要素がbool
挿入が行われたかどうかを示すという事実も利用しています。
自分で (なしで )実装したい場合stl
は、いくつかの方法があります。
並べ替えを通して。これは、文字の順序を気にしない場合に機能します。最初に文字列を並べ替えてから、すべての要素に対して非常に簡単なチェックを実行します。
if( currentElement == elemebtBeforeIt )
deleteCurrentElement
もう 1 つの方法は、一意の文字専用の配列を用意することです (配列ではないかもしれませんが、アイデアは得られます)。文字列を調べて、各文字について次を確認します。
foreach Element of the string:
if( arrayOfUniqueElements contains currentElement )
do nothing
else
put currentElement into the arrayOfUniquElements
この後、専用配列にすべての一意の要素が含まれます。