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