2017-02-09 267 views
2

我正在學校項目上工作,而且我有點卡住了。我需要使用是否整數cin輸入集(因此在數量或在命令提示符下鍵入我能管)在任何下列格式:使用cin讀取任意空格的逗號分隔整數對(x,y)

3,4

2,7

7,1

或選項2,

3,4 2,7

7,1

或選項3,

3,4 2,7 7,1

也有可能是,後面輸入一個空格,像3, 4 2, 7 7, 1

使用此信息,我必須將該集合的第一個數字放入1個矢量中,並將第二個數字(a在,中)插入到第二個向量中。

目前,我下面的幾乎完全是我需要它做的,但是當使用選項2或3讀取文件時,當std::stoi()達到一個空格時,出現調試錯誤(abort()has been稱爲

我試過使用stringstream,但我似乎無法正確使用它,我需要什麼。

我能做些什麼來解決這個問題?

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

using namespace std; 

int main() { 

    string input; 

    // Create the 2 vectors 
    vector<int> inputVector; 
    vector<int> inputVector2; 

    // Read until end of file OR ^Z 
    while (cin >> input) { 

     // Grab the first digit, use stoi to turn it into an int 
     inputVector.push_back(stoi(input)); 

     // Use substr and find to find the second string and turn it into a string as well. 
     inputVector2.push_back(stoi(input.substr(input.find(',') + 1, input.length()))); 
    } 

    // Print out both of the vectors to see if they were filled correctly... 
    cout << "Vector 1 Contains..." << endl; 
    for (int i = 0; i < inputVector.size(); i++) { 
     cout << inputVector[i] << ", "; 
    } 
    cout << endl; 

    cout << endl << "Vector 2 Contains..." << endl; 
    for (int i = 0; i < inputVector2.size(); i++) { 
     cout << inputVector2[i] << ", "; 
    } 
    cout << endl; 

} 
+0

請採取[旅遊](http://stackoverflow.com/tour)並閱讀[幫助頁](http://stackoverflow.com/help)。這裏是[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – 2017-02-09 02:00:56

+1

它可以是'3,7'(有空格),還是一定是'3,7',沒有空格? – Justin

+0

@Justin無論是或。只要集合中的一個整數進入vector1,另一個進入vector2,就可以有空間。它應該能夠處理任意數量的集合 – KappaPride

回答

4

cin已經忽略了空格,所以我們還需要忽略逗號。要做到這一點,最簡單的方法就是逗號存儲在一個未使用的char

int a, b; 
char comma; 

cin >> a >> comma >> b; 

這將解析一個#, #與任何元素之間可選空白。

然後,讀了一堆這樣的逗號分隔值的,你可以做這樣的事情:

#include <utility> // for std::pair 

... 

vector<pair<int, int>> inputVector; 

... 

while (cin >> a >> comma >> b) { 
    inputVector.push_back(pair<int, int>{ a, b }); 
} 

int a, b; 
char comma; 

while (cin >> a >> comma >> b) { 
    inputVector.push_back(a); 
    inputVector2.push_back(b); 
} 

然而,你的兩個向量將得到更好的通過pair<int, int>一個矢量替代

DEMO

+0

非常感謝!我清楚地思考它,並忘記了基礎知識!你的解決方案完美運作 – KappaPride