我有一个包含若干个整数的字符串,这些整数用空格分隔。例如:
string myString = "10 15 20 23";
我希望将其转换为整数向量。因此,在该示例中,向量应该相等
vector<int> myNumbers = {10, 15, 20, 23};
我该怎么做?对于这个愚蠢的问题,我很抱歉。
您可以使用std::stringstream
。除了其他的头文件之外,您还需要#include <sstream>
。
#include <sstream>
#include <vector>
#include <string>
std::string myString = "10 15 20 23";
std::stringstream iss( myString );
int number;
std::vector<int> myNumbers;
while ( iss >> number )
myNumbers.push_back( number );
while (iss >> number)
:-) - Wolfusing std::vector; using std::stringstream; using std::string;
- Wolfstd::string myString = "10 15 20 23";
std::istringstream is( myString );
std::vector<int> myNumbers( ( std::istream_iterator<int>( is ) ), ( std::istream_iterator<int>() ) );
如果向量已经被定义,可以使用以下语句替代最后一行:
myNumbers.assign( std::istream_iterator<int>( is ), std::istream_iterator<int>() );
std::vector<int> myNumbers{ std::istream_iterator<int>( is ), std::istream_iterator<int>() };
- Martin York这基本上是现在其他答案的副本。
#include <iostream>
#include <vector>
#include <iterator>
#include <sstream>
int main(int argc, char* argv[]) {
std::string s = "1 2 3 4 5";
std::istringstream iss(s);
std::vector<int> v{std::istream_iterator<int>(iss),
std::istream_iterator<int>()};
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
}
std::copy
。因为 std::vector
有一个构造函数,它接受两个迭代器(就像 std::copy
一样)。 - Martin York
boost::split_regex
。 - Blacktempel