2016-07-15 11 views
0

Meine Zeichenfolge ist !!(!()). Ich möchte Doppelausrufe aus der Zeichenfolge entfernen.remove_copy Verwendung mit Zeichenfolgen

Dies funktioniert, aber es entfernt alle Ausrufen

remove_copy(str.begin(), str.end(),ostream_iterator<char>(cout), '!');//gives (()) 

Diese nicht

funktioniert
remove_copy(str.begin(), str.end(),ostream_iterator<string>(cout), "!!"); 

die obige Zeile diesem Fehler Würfen Mit

/usr/include/C++/5/Bits /predefined_ops.h:194:17: Fehler: ISO C++ verbietet den Vergleich zwischen Zeiger und Ganzzahl [-fpermissiv] {return * __ it == _M_value; }

+0

Eine Referenz macht es offensichtlich, dass es keine Überladung gibt, die eine Schnur spezifisch nimmt. – chris

+0

@chris ostream_iterator hat 'template >'. Das bedeutet, ich kann String richtig benutzen? –

+1

@SamidhT Zeichenfolge ist eine Liste von Zeichen. remove_copy durchläuft die Liste und entfernt das Zeichen. Es kann auch mit einer Liste von Strings arbeiten. – Balu

Antwort

0

die Dokumentation von remove_copy Lesen

OutputIterator remove_copy (InputIterator first, InputIterator last, 
          OutputIterator result, const T& val); 

The function uses operator== to compare the individual elements to val. 

So verwendet sie jedes Zeichen der Zeichenfolge und vergleicht sie mit val. Also würde der zweite Fall nicht funktionieren.

Ich landete es auf diese Weise tun

str.erase(str.find("!!"),2); 

auch sicher, dass die Zeichenfolge hat „!!“ andernfalls stürzt das Programm

if(str.find("!!") != string::npos) 
    str.erase(str.find("!!"),2); 
+0

@ user4581301 gültiger Punkt. Ich habe die Antwort bearbeitet. –

+0

Ihr bearbeiteter Code erledigt das 'find' zweimal, das ist Zeitverschwendung, Sie haben es schon einmal gefunden! Es sollte sein: 'auto pos = str.find (" !! "); if (pos! = string :: npos) str.release (pos, 2); 'Was ist, wenn mehr als ein Vorkommen von' "!!" 'in der Zeichenfolge vorhanden ist? Was ist wenn es "" !!! "'? Dies ist keine sehr allgemeine Lösung für das Problem. –

+0

@ JonathanWakely wenn es "!!!" Es hängt wirklich davon ab, wie Sie damit umgehen wollen (2 Instanzen von !! vs 1). Trotzdem stimme ich dir immer noch zu, es ist weder verallgemeinert noch effizient. –