Int токенизатор

Я знаю, что существуют токенизаторы строк, но есть ли "токенизатор"?

Например, я хочу разбить строку "12 34 46" и иметь:

Список [0] = 12

Список [1] ​​= 34

Список [2] = 46

В частности, мне интересно, делает ли Boost:: Tokenizer это. Хотя я не мог найти примеров, которые не использовали строки.

Ответы

Ответ 1

Да есть: используйте поток, например. a stringstream:

stringstream sstr("12 34 46");
int i;
while (sstr >> i)
    list.push_back(i);

В качестве альтернативы вы также можете использовать алгоритмы STL и/или адаптеры итераторов в сочетании с конструкторами:

vector<int> list = vector<int>(istream_iterator<int>(sstr), istream_iterator<int>());

Ответ 2

С++ String Toolkit Library (StrTk) имеет следующее решение вашей проблемы:

#include <string>
#include <deque>
#include "strtk.hpp"

int main()
{ 
   {
      std::string data = "12 34 46";
      std::deque<int> int_list;
      strtk::parse(data," ",int_list);
   }

   {
      std::string data = "12.12,34.34|46.46 58.58";
      std::deque<double> double_list;
      strtk::parse(data," ,|",double_list);
   }

   return 0;
}

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

Примечание. Процесс синтаксического анализа является EXTREMELY быстрым и эффективным, помещая решения stdlib и boost для стыда.

Ответ 3

То, что вы ищете, - это два отдельных действия. Сначала отметьте строку, затем конвертируйте каждый токен в int.

Ответ 4

Я не уверен, что вы можете сделать это без использования строки или char *, потому что вам нужно, но оба числа и пробелы в одном наборе...