Иногда возникаеть необходимость удалить из переменной типа std::string пробелы слева и справа. В классе string для этого методов, к сожалению нет. Для себя я набросал пару функций:
//проверка символа на разделитель bool is_del(char c) { if(c==' ' || c=='\t' || c==';' || c==',' || c=='=' || c==':' || c=='\n') return true; return false; }
// обрезаем все пробелы, табы, двоеточия и знаки "равно" слева string triml(string s) { int pos; for(pos=0;(is_del(s[pos]) && (pos<s.size()));++pos) {} s.erase(0, pos); return s; } // обрезаем все пробелы, табы, двоеточия и знаки "равно" справа string trimr(string s) { reverse(s.begin(), s.end()); s = triml(s); reverse(s.begin(), s.end()); return s; } //обрежем по краям string trim(string str) { return triml(trimr(str)); }
Зачем for?
inline std::string trimr(std::string str) {
return source.erase(source.find_last_not_of(' ')+1);
}
inline std::string triml(std::string str) {
source.erase(0, source.find_first_not_of(' '));
}
А вообще, немного странно в блоге qtblog читать про std::string. Ведь Qt предлагает отличный инструмент для работы как с UTF-8, так и с ASCII-строками. QString называется. С точки зрения эффективности трудозатрат, QString'ом пользоваться гораздо удобнее.
Ну да, я забыл eturn во втором случае, и названия переменных у меня не совпадают, но в общем понятно, что я имел ввиду.
inline std::string trimr(std::string str) {
return str.erase(str.find_last_not_of(' ')+1);
}
inline std::string triml(std::string str) {
return str.erase(0, str.find_first_not_of(' '));
}
насчет std::string не страшно, так как QT написано на C++ и не все же мы пишем на QT.
Можно было блог обозвать Qt + C++ )
А как на счет этого...
""часто возникает необходимость выбросить из начала и конца строки все лишние пробельные символы (такие как: пробелы, символы табуляции, символы перевода строки). Для этой цели существует функция stripWhiteSpace(): ""
Отправить комментарий