如何将一个整数字符串转换为一个充满int的向量?

时间:2015-01-13 19:29:38

标签: c++ vector

我知道有关同样事情的其他问题,但是,我已经使用其他资源来提出我现在拥有的东西,并且我得到了一个我似乎无法弄清楚的错误。另外,请记住我是一名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;
    }

我得到的错误是在指定的错误行处有预期的表达式... 任何想法如何解决这个问题?

提前致谢,如果有什么不清楚,请告诉我!

1 个答案:

答案 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个数字,会产生不适合目标类型的结果。