2014-11-21 122 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, " ")); 
}