Подтвердить что ты не робот

Как разбить строку, используя istringstream с другим разделителем, чем пробел?

Следующий трюк с использованием istringstream для разделения строки с пробелами.

int main() {
    string sentence("Cpp is fun");
    istringstream in(sentence);
    vector<string> vec = vector<string>(istream_iterator<string>(in), istream_iterator<string>());
    return 0;
}

Есть ли подобный трюк, чтобы разделить строку с разделителем any? Например, | в "Cpp | is | fun".

4b9b3361

Ответ 1

В общем случае подход istringstream медленный/неэффективен и требует как минимум столько же памяти, сколько и самой строки (что происходит, когда у вас очень большая строка?). С++ String Toolkit Library (StrTk) имеет следующее решение вашей проблемы:

#include <string>
#include <vector>
#include <deque>
#include "strtk.hpp"
int main()
{
   std::string sentence1( "Cpp is fun" );
   std::vector<std::string> vec;
   strtk::parse(sentence1," ",vec);

   std::string sentence2( "Cpp,is|fun" );
   std::deque<std::string> deq;
   strtk::parse(sentence2,"|,",deq);

   return 0;
}

Дополнительные примеры можно найти Здесь

Ответ 2

#include <iostream>
#include <string>
#include <sstream>

int main()
{
  std::istringstream iss { "Cpp|is|fun" };

  std::string s;
  while ( std::getline( iss, s, '|' ) )
    std::cout << s << std::endl;

  return 0;
}

Демо