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 *, потому что вам нужно, но оба числа и пробелы в одном наборе...