2012-06-14 5 views
5

Mam mały bart mózg: Chciałbym usunąć wszystkie wystąpienia znaku nowej linii '\n' w std::string. Wolałbym używać STL zamiast ręcznego, multi-zagnieżdżonego dla pętli; Jedynym problemem jest to, że zapomniałem ...C++ Usuwanie znaków z ciągu znaków za pomocą STL

Czy pracowałoby się for(...) { std::string::remove_if(...); } ;? Czy muszę użyć std::for_each(...,..., std::string::remove_if(...));? A może wymagałoby czegoś innego?

Odpowiedz

19

Pierwszy pomysł: idiom remove/kasowania:

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

+1 Dla efektywności :) – Mahesh

+0

Rzeczywiście, jest to najprawdopodobniej najlepsze, co dostaniesz. – chris

+4

Potrzebowałem użyć '#include ' do skompilowania. – Westy92

3

Jeśli masz Boost.Range działa jeszcze krócej:

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

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

Dostępne również pod węższą nazwą 'boost :: range :: remove_erase' oraz poprzez szersze rozszerzenie' boost/range/algorithm_ext.hpp' – Stein