2012-06-14 6 views
5

Ich habe einen kleinen Hirn Furz: Ich möchte alle Instanzen der Newline-Zeichen '\n' in einem std::string entfernen. Ich würde lieber die STL anstelle von manuellen, Multi-Nested für Schleifen verwenden; das einzige Problem ist, ich habe vergessen, wie ...C++ Entfernen von Zeichen aus der Zeichenkette mit STL

Würde for(...) { std::string::remove_if(...); } ; funktionieren? Könnte ich std::for_each(...,..., std::string::remove_if(...)); verwenden? Oder würde etwas anderes benötigt?

Antwort

19

Erste Idee: das Entfernen/Lösch-Idiom:

str.erase(std::remove(str.begin(), str.end(), '\n'), str.end()); 
+1

+1 Für Effizienz :) – Mahesh

+0

Tatsächlich ist dies am ehesten das Beste, was du bekommst. – chris

+4

Ich musste '#include ' verwenden, um dies zu kompilieren. – Westy92

3

Wenn Sie Boost.Range haben es funktioniert noch kürzer:

#include <boost\range\algorithm_ext\erase.hpp> 

boost::remove_erase(str, '\n'); 
+0

Auch verfügbar unter dem engeren Namen 'boost :: range :: remove_erase' und durch einen breiteren Include' boost/range/algorithm_ext.hpp' – Stein