Реализация функции разбиения строки - split string



Листинг функции, написанной с использованием stl, для разбиения строки на подстроки. Для разбиения используется разделить. В качестве входных аргументов функции задаются следующие параметры:

  • sep - строка, определяет разделитель;
  • str - строка, которую необходимо разбить;
  • allowEmptyEntries - помещать ли в результат пустые строки?

На выходе функции stl вектор (std::vector<string>), содержащий подстроки, полученные путем разбиения строки str разделителем sep

  1. using namespace std;
  2. typedef vector<string> StringList;
  3. StringList split( const string sep, const string str,
  4. bool allowEmptyEntries )
  5. {
  6. StringList lst;
  7. int j = 0;
  8. int i = str.find( sep, j );
  9. while ( i != -1 ) {
  10. if ( i > j && i <= (int)str.length() )
  11. lst.push_back( str.substr( j, i - j ) );
  12. else if ( allowEmptyEntries )
  13. lst.push_back( "" );
  14. j = i + sep.length();
  15. i = str.find( sep, sep.length() > 0 ? j : j+1 );
  16. }
  17. int l = str.length() - 1;
  18. if ( str.substr( j, l - j + 1 ).length() > 0 )
  19. lst.push_back( str.substr( j, l - j + 1 ) );
  20. else if ( allowEmptyEntries )
  21. lst.push_back( "" );
  22. return lst;
  23. }

Пример использования:

  1. ...
  2. string str = "first;second;third;;last";
  3. StringList list = split(";",str,true );
  4.  
  5. for( int i=0;i<list.size();i++){
  6. cout << i+1 << ".str part :" << list.at(i) << endl;
  7. }
  8. ...
В результате выполнения данного кода:
  1. str part : first
  2. str part : second
  3. str part : third
  4. str part :
  5. str part : last

Комментарии

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

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Защита от спама: ответьте на вопрос
Image CAPTCHA
Enter the characters (without spaces) shown in the image.