2014-05-07 57 views
0

正如標題所示,我正試圖將文件讀入兩個矢量。將每行兩個單詞的文件讀入兩個不同的矢量

的文件應該是這樣的

1你好

3如何

4你

現在我有這個,但它似乎沒有上班

int number; 
string word; 
std::vector<int> first; 
std::vector<string> second; 

ifstream inFile(File); 
if (inFile.is_open()) { 

    while (inFile >> number >> word) { 
    first.push_back(number); 
    second.push_back(word); 

    } 
} 
+1

你不能把一個'string'到int'的'向量。可以使'first'成爲字符串的向量,或者執行字符串到int的轉換。 –

回答

3

number的類型更改爲int

另外,is_open()是多餘的(除非你有一個else語句處理時,文件無法打開的情況下)作爲while循環,如果該文件無法打開

+0

數字是int類型的,我確實有其他的,但是謝謝 – user3396692

+1

@ user3396692'數字的類型是int,'不是根據上面的代碼。 – user657267

+0

好眼睛,它在我的程序上,但我改變了它 – user3396692

2

您可以使用無論如何都會失敗atoi()函數我相信std庫的頭文件。 它會將一個ASCII字符串轉換爲整數。所以......

#include<string> 
string number, word; 
std::vector<int> first; 
std::vector<string> second; 

ifstream inFile(File); 
if (inFile.is_open()) { 

while (inFile >> number >> word) { 
    first.push_back(atoi(number)); 
    second.push_back(word); 

} 
} 

您可能需要進行檢查,以確保您atoi()推到載體之前,但這個可能是你的情況下工作沒有失敗。

好運

編輯:基於下面指出atoi()可能是一個不錯的選擇,我將修改我的答案的評論。請參閱this鏈接。它接受的答案建議使用std::stoi() 所以要修改我的答案...

#include<string> 
string number, word; 
std::vector<int> first; 
std::vector<string> second; 

ifstream inFile(File); 
if (inFile.is_open()) { 

while (inFile >> number >> word) { 
    first.push_back(std::stoi(number));//changed this line 
    second.push_back(word); 

} 
} 
+0

你通常應該在C++中避免'atoi',因爲它會使錯誤處理變得很難 - 另請參見http://stackoverflow.com/questions/1640720/how-do-i-tell-if-the-c-function-atoi-失敗或如果它是一個字符串的零/ 1640804#1640804 – Soren

+0

@Soren我已經修改我的答案,將此考慮在內。謝謝您的意見。 –

+0

..供參考:關於'std :: atoi' vs'std :: stoi'的優點可以在這裏找到; http://stackoverflow.com/questions/20583945/what-is-the-difference-between-stdatoi-and-stdstoi – Soren

相關問題