Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 整数标记器_C++_Tokenize - Fatal编程技术网

C++ 整数标记器

C++ 整数标记器,c++,tokenize,C++,Tokenize,我知道有字符串标记器,但有“int标记器”吗 例如,我希望拆分字符串“12 34 46”,并具有: 列表[0]=12 列表[1]=34 列表[2]=46 特别是,我想知道Boost::Tokenizer是否能做到这一点。尽管我找不到任何不使用字符串的示例。您要查找的是两个单独的操作。首先标记字符串,然后将每个标记转换为整数。我不确定您是否可以不使用字符串或字符*来执行此操作,因为您必须将数字和空格都转换为同一组…是的,有:使用流,例如stringstream: stringstream sstr

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

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

列表[0]=12

列表[1]=34

列表[2]=46


特别是,我想知道Boost::Tokenizer是否能做到这一点。尽管我找不到任何不使用字符串的示例。

您要查找的是两个单独的操作。首先标记字符串,然后将每个标记转换为整数。

我不确定您是否可以不使用字符串或字符*来执行此操作,因为您必须将数字和空格都转换为同一组…

是的,有:使用流,例如
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>());
vector list=vector(istream_迭代器(sstr),istream_迭代器());
对您的问题有以下解决方案:

#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;
}
#包括
#包括
#包括“strtk.hpp”
int main()
{ 
{
std::string data=“12 34 46”;
std::deque int_列表;
strtk::parse(数据,“,整数列表);
}
{
std::string data=“12.12,34.34 | 46.46 58.58”;
std::deque双_列表;
strtk::parse(数据,,,,,双_列表);
}
返回0;
}
可以找到更多的例子


注意:解析过程非常快速高效,使基于stdlib和boost的解决方案相形见绌。

性感,但不必要的冗长<代码>向量列表(istream_迭代器(sstr),istream_迭代器())就可以了。:)阿瓦卡尔:奇怪的是,不,你的代码不起作用。您或者需要使用显式构造函数(正如我所做的那样),或者在其中一个参数周围包含一对额外的大括号;否则,代码将无法工作–相反,这是名为
list
的函数原型的声明,返回类型为
vector
。试试看!我指的是括号,不是大括号。我曾在一个类似的项目中工作过,其中一个项目被迫拆分“数字”。如果您选择使用stringstream进行此操作,它将使您的程序至少比使用char数组/字符串进行查找和拆分时慢5-10倍。最后,只需将其转换为int即可。这个性能损失是我在GCC4.3和VS2008的c2d设置上测试的,当函数spliting int和字符串spliting one运行了几十亿次。Konrad,它确实不起作用。这是我的荣幸。我需要一个编译器向我指出它。