如何将一串整数转换为一个充满整数的向量?
How to convert a string of integers into a vector full of int's?
我知道有人问过关于同一件事的其他问题,但是,我已经使用这些其他资源来得出我现在所拥有的,但我遇到了一个我似乎无法弄清楚的错误。另外,请记住,我是一名 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;
}
我得到的错误是在指示的错误行中有预期的表达式...
有什么解决办法吗?
在此先感谢,如果有任何不清楚的地方,请告诉我!
假设您有理由确定输入仅包含格式正确的 int
s,(或者可以忍受只是停止读取 when/if 遇到除可读整数之外的其他内容),则不需要transform
这里——istream_iterator
本身可以很好地处理转换。您可以直接从迭代器初始化向量,给出如下代码:
std::istringstream is(newString);
std::vector<int> intVector { std::istream_iterator<int>(is),
std::istream_iterator<int>()};
这在一个方面与您的版本不同:如果您将字符串提供给 stoi
,但它无法转换为整数,它会抛出异常--invalid_argument
如果它包含类似 ac;
的内容,根本无法转换为整数,或者 out_of_range
如果它包含类似 50 位数字的内容,则会产生不适合目标类型的结果。
我知道有人问过关于同一件事的其他问题,但是,我已经使用这些其他资源来得出我现在所拥有的,但我遇到了一个我似乎无法弄清楚的错误。另外,请记住,我是一名 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;
}
我得到的错误是在指示的错误行中有预期的表达式... 有什么解决办法吗?
在此先感谢,如果有任何不清楚的地方,请告诉我!
假设您有理由确定输入仅包含格式正确的 int
s,(或者可以忍受只是停止读取 when/if 遇到除可读整数之外的其他内容),则不需要transform
这里——istream_iterator
本身可以很好地处理转换。您可以直接从迭代器初始化向量,给出如下代码:
std::istringstream is(newString);
std::vector<int> intVector { std::istream_iterator<int>(is),
std::istream_iterator<int>()};
这在一个方面与您的版本不同:如果您将字符串提供给 stoi
,但它无法转换为整数,它会抛出异常--invalid_argument
如果它包含类似 ac;
的内容,根本无法转换为整数,或者 out_of_range
如果它包含类似 50 位数字的内容,则会产生不适合目标类型的结果。