V.H. Belvadi
V.H. Belvadi

Reputation: 57

Delete recurring characters

For a little something I was trying out in C++, I have accepted a string (say 'a tomato is red') and gotten rid of spaces ('atomatoisred').

Now how would I go about deleting recurring characters only, on condition that the first instance of that character gets to stay (so our example becomes,'atomisred')?

Thanks in advance!

Upvotes: 1

Views: 311

Answers (2)

SingerOfTheFall
SingerOfTheFall

Reputation: 29966

If you want to implement it yourself (without stl), there are a number of ways.

  1. Through sorting. This works if you don't care about the order of the chars. Sort your string first, then go through it, performing a very simple check on every element:

    if( currentElement == elemebtBeforeIt )
        deleteCurrentElement
    
  2. Another way is to have an array dedicated to the unique characters (well, maybe not an array, but you'll get the idea). Go through your string, and for each charcter, check:

    foreach Element of the string:
        if( arrayOfUniqueElements contains currentElement ) 
            do nothing
        else
            put currentElement into the arrayOfUniquElements
    

    After this, you will have all unique elements in the dedicated array.

Upvotes: 0

Konrad Rudolph
Konrad Rudolph

Reputation: 545618

You can use the erase-remove idiom in conjunction with a set keeping track of the duplicate characters:

std::set<char> dupes;

str.erase(
    std::remove_if(
        str.begin(), str.end(),
        [&](char c) { return not dupes.insert(c).second; }),
    str.end());

This also uses the fact that the return value of std::set::insert is a pair whose second element is a bool indicating whether the insertion took place.

Upvotes: 7

Related Questions