2017-08-12 57 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循环,但可以用一个简单的条件很容易解决。随你便。

相关问题