15

我知道有字符串标记器,但有“int 标记器”吗?

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

列表[0]=12

列表[1]=34

列表[2]=46

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

4

4 回答 4

14

C++ 字符串工具包库(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 的解决方案感到羞耻

于 2011-01-13T06:54:29.543 回答
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>());
于 2009-07-17T06:59:24.547 回答
0

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

于 2009-07-17T06:58:29.057 回答
0

我不确定您是否可以在不使用字符串或 char* 的情况下执行此操作,因为您必须将数字和空格都放在同一个集合中...

于 2009-07-17T06:58:39.570 回答