Int tokenizer

时间:2009-07-17 06:55:13

标签: c++ tokenize

我知道有字符串标记符但是有“int tokenizer”吗?

例如,我想拆分字符串“12 34 46”并具有:

  

列表[0] = 12

     

列表[1] = 34

     

列表[2] = 46

特别是,我想知道Boost :: Tokenizer是否这样做。虽然我找不到任何不使用字符串的例子。

4 个答案:

答案 0 :(得分:14)

C++ 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;
}

可以找到更多示例Here

注意:解析过程 EXTREMELY 快速高效,使stdlib和基于增强的解决方案感到羞耻。

答案 1 :(得分:12)

是的:使用流,例如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 :(得分:0)

您正在寻找的是两个单独的行动。首先对字符串进行标记,然后将每个标记转换为int。

答案 3 :(得分:0)

我不确定你是否可以在不使用字符串或字符*的情况下执行此操作,因为你必须将数字和空格分成同一组...