Аналог trim в C++

Иногда возникаеть необходимость удалить из переменной типа 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(' '));
}

http://www.cppreference.com/wiki/string/find_last_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(): ""

Отправить комментарий

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Поисковые системы будут индексировать и переходить по ссылкам на разрешённые домены.

Подробнее о форматировании

CAPTCHA
Вводим все на русском
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.