Int токенизатор - PullRequest
       27

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

15 голосов
/ 17 июля 2009

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

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

список [0] = 12

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

список [2] = 46

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

Ответы [ 4 ]

14 голосов
/ 13 января 2011

Библиотека C ++ String Toolkit (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;
}

Больше примеров можно найти Здесь

Примечание: процесс разбора ЧРЕЗВЫЧАЙНО быстрый и эффективный, позор для решений на базе stdlib и boost.

12 голосов
/ 17 июля 2009

Да, есть: использовать поток, например, 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>());
0 голосов
/ 17 июля 2009

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

0 голосов
/ 17 июля 2009

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

...