2017-08-12 36 views
0

我使用以用空格分隔未知大小的單行輸入並將其存儲到一個整數數組

string temp ; 
vector <int> arr ;  
while(getline(cin,temp,' ')) 
{ 
    arr.push_back(temp); 
} 

,但它不工作如我所料,我得到一個編譯時錯誤

no matching function for call to 'std::vector<int>::push_back(std::string&)'| 

請提供C++或C的解決方案

+0

當預計int時,您正在推送字符串。 'istream&getline(istream&is,string&str,char delim);' –

回答

1

你已經差不多了,但是你的向量類型錯了,你正在存儲字符串,而不是整數。

string temp; 
vector<string> arr; 
while(getline(cin,temp,' ')) 
{ 
    arr.push_back(temp); 
} 
0

如果我正確理解,您試圖將一行整數存儲到整數向量中。

溶液(run it):

#include <iostream> 
#include <cctype> 
#include <string> 
#include <vector> 

using namespace std; 

std::istream& get_line(std::vector<int >& r) 
{ 
    char c; 
    while (cin.get(c) && (isdigit(c) || isspace(c)) && c != '\n') 
    { 
    cin.putback(c); 
    int i; 
    cin >> i; 
    r.push_back(i); 
    } 

    return cin; 
} 

int main() 
{ 
    vector<int> v; 
    while (get_line(v)) 
    { 
    for (auto e : v) 
     cout << e << ' '; 
    cout << endl; 
    v.clear(); 
    } 

    return 0; 
} 

另一種解決方案將需要更先進的STL知識(stringstream & istream_iterator)。

1

這利用了作爲C++ 11標準一部分的std::stoistoi只需一個整數的字符串表示並將其轉換爲整數形式。即"123" -> 123

string temp ; 
vector <int> arr ;  
while(getline(cin,temp,' ')) 
{ 
    arr.push_back(stoi(temp)); 
} 
0

您可能想要先將該行作爲字符串讀取,然後將整數分開,然後將它們推入數組中。

C++ 11(我想?)解決方案:

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

int main() 
{ 
    std::vector<int> arr; 

    for (std::string temp; std::getline(std::cin, temp);) 
    { 
     std::istringstream iss(temp); 
     std::copy(std::istream_iterator<int>(iss), std::istream_iterator<int>(), std::back_inserter(arr)); 

     for (const auto & elem : arr) 
      std::cout << elem << ' '; 
     std::cout << '\n'; 
     arr.clear(); 
    } 

    return 0; 
} 

問題是你現在需要一種方法來阻止infinte循環,但可以用一個簡單的條件很容易解決。隨你便。

相關問題