我知道有关同样事情的其他问题,但是,我已经使用其他资源来提出我现在拥有的东西,并且我得到了一个我似乎无法弄清楚的错误。另外,请记住我是一名c ++初学者。话虽这么说,我有一个非常大的字符串填充整数格式如下:
newString = "12 -34 50 2 -102 13 78 9"
(实际字符串要大得多)。然后我尝试使用transform()
创建一个函数,将字符串转换为int的向量:
int convertString(){
istringstream is(newString);
vector<int> intVector;
transform(istream_iterator<string>( is ),
istream_iterator<string>(),
back_inserter( intVector ),
[]( const string &newString ){ return ( stoi( newString ) ); } );//This is the line indicated in the error!
for(int x : intVector )
cout << x << ' '<<endl;
return 0;
}
我得到的错误是在指定的错误行处有预期的表达式... 任何想法如何解决这个问题?
提前致谢,如果有什么不清楚,请告诉我!
答案 0 :(得分:7)
假设您已经合理地确定输入仅包含格式正确的int
,(或者只有在遇到除可读整数之外的其他内容时才能停止读取),则不需要{{1}这里 - transform
本身可以很好地处理转换。您可以直接从迭代器初始化向量,给出如下代码:
istream_iterator
这在一个方面与你的版本不同:如果你给std::istringstream is(newString);
std::vector<int> intVector { std::istream_iterator<int>(is),
std::istream_iterator<int>()};
一个字符串它不能转换成一个整数,它会抛出一个例外 - stoi
如果它包含像invalid_argument
这样的东西根本无法转换为整数,或ac;
如果它包含50个数字,会产生不适合目标类型的结果。