Цитата(AD @ 10.9.2008, 19:59)
QString section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const
QString simplified () const
QStringList split ( const QString & sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
QString trimmed () const
То, что подобного нет в stl-е это несколько огорчает.
Хотя, если вспомнить, что классов строк в stl-е как минимум 2, контейнеров и того больше, и опции не все однозначны, то становится понятно, почему так.
Ну а частные случаи реализуются довольно примитивно, например:
std::string trimmed(const std::string& in) {
return std::string(in.find_first_not_of(" \t\r\n\v\f"), in.find_last_not_of(" \t\r\n\v\f"));
}
struct simplified_pred_t {
simplified_pred_t(bool& is_prev_char) : is_prev_char(is_prev_char) {}
bool operator()(const char c) {
if (spase.find(c) == space.npos)
return is_prev_char = false;
if (is_prev_char)
return true;
is_prev_char = true;
return false;
}
static const spase(" \t\r\n\v\f");
private:
bool& is_prev_char;
};
std::string simplified(const std::string& in) {
std::string res;
bool is_space = false;
std::remove_copy_if(
in.find_first_not_of(simplified_pred_t::space), in.find_last_not_of(simplified_pred_t::space),
back_inserter(res), simplified_pred_t(is_space))
return res;
}
Ну и есть есть Boost.algoritm - там многие такие примитивы живут.
Цитата(AD @ 10.9.2008, 19:59)
int find(QRegExp* rx);
...Особенно интересно такие функции: как поиск по регэкспу (есть ли в stl регэкспы)...
Сейчас можно взять любую понравившуюся библиотеку регэкспов, например pcre или из боста (2 штуки).
В новый стандарт регэкспы будут включены (Вроде прототип - Boost.Regex).