2014-11-21 89 views
0

我目前手边的一个类中有User :: User(string id,string ratings)。 我正在尝试将当前存储的字符串“1 5 5 3 0 -5 0 5”(这是评级的参数,已经处理了id)转换成一个无法更改的向量,称为向量(int)< - 整数评分作为在字符串中看到的8个整数的向量。遍历这个字符串并存储单个值(包括底片)的最佳方法是什么?无法在C++中将整数字符串转换为整数

+1

退房'的std :: stringstream'。 – molbdnilo 2014-11-21 10:49:11

+0

定义“最佳”...容易推断正确性?扩展的错误处理?快速? – 2014-11-21 10:49:23

+0

最有意义的是,它将最有效地将来自该流的int向量中的8个不同值(在这种情况下)放置(并且还将识别空间不应被转换为整数),并且否定将导致向量中的索引为字符串中下一个索引的负版本。 – 2014-11-21 10:53:26

回答

2
#include <sstream> 
#include <vector> 
#include <iostream> 

int main() 
{ 
    std::istringstream is("1 5 5 3 0 -5 0 5"); 
    std::vector<int> v; 

    int n; 
    while (is >> n) 
     v.push_back(n); 

    for (size_t i = 0; i < v.size(); i++) 
     std::cout << v[i] << '\n'; 

    return 0; 
} 
2

这个问题是一个典型的用例为stream iterators

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <sstream> 
#include <vector> 


int main() 
{ 
    std::istringstream iss{ "1 5 5 3 0 -5 -5" }; 
    std::vector<int> v; 

    std::copy(std::istream_iterator<int>{ iss }, 
      std::istream_iterator<int>{}, 
      std::back_inserter(v)); 

    std::copy(std::begin(v), 
      std::end(v), 
      std::ostream_iterator<int>(std::cout, " ")); 
}