Листинг функции, написанной с использованием stl, для разбиения строки на подстроки. Для разбиения используется разделить. В качестве входных аргументов функции задаются следующие параметры:
- sep - строка, определяет разделитель;
- str - строка, которую необходимо разбить;
- allowEmptyEntries - помещать ли в результат пустые строки?
На выходе функции stl вектор (std::vector<string>), содержащий подстроки, полученные путем разбиения строки str разделителем sep
using namespace std; typedef vector<string> StringList; StringList split( const string sep, const string str, bool allowEmptyEntries ) { StringList lst; int j = 0; int i = str.find( sep, j ); while ( i != -1 ) { if ( i > j && i <= (int)str.length() ) lst.push_back( str.substr( j, i - j ) ); else if ( allowEmptyEntries ) lst.push_back( "" ); j = i + sep.length(); i = str.find( sep, sep.length() > 0 ? j : j+1 ); } int l = str.length() - 1; if ( str.substr( j, l - j + 1 ).length() > 0 ) lst.push_back( str.substr( j, l - j + 1 ) ); else if ( allowEmptyEntries ) lst.push_back( "" ); return lst; }
Пример использования:
... string str = "first;second;third;;last"; StringList list = split(";",str,true ); for( int i=0;i<list.size();i++){ cout << i+1 << ".str part :" << list.at(i) << endl; } ...
str part : first str part : second str part : third str part : str part : last
Комментарии
Отправить комментарий