2012-06-14 11 views
5

Sto avendo una piccola scoreggia cerebrale: vorrei rimuovere tutte le istanze del carattere di nuova riga '\n' in un std::string. Preferirei usare l'STL invece dei loop multi-nested manuali; l'unico problema è che ho dimenticato come ...C++ Rimozione di caratteri da stringhe usando STL

for(...) { std::string::remove_if(...); } ; lavoro? Potrei aver bisogno di usare std::for_each(...,..., std::string::remove_if(...));? O sarebbe richiesto qualcos'altro?

risposta

19

prima idea: l'idioma rimuovere/cancellare:

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

+1 Per l'efficienza :) – Mahesh

+0

In effetti, questo è più probabile il meglio che otterrai. – chris

+4

Avevo bisogno di usare '#include ' per poterlo compilare. – Westy92

3

Se hai Boost.Range funziona ancora più breve:

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

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

Disponibile anche sotto il nome più stretto 'boost :: range :: remove_erase' e ​​attraverso un più ampio include' boost/range/algorithm_ext.hpp' – Stein

Problemi correlati