2015-11-20 61 views
0

試圖從文本文件格式閱讀:C++從文本文件中讀取和獨立成載體

Jamie 27 31 
Tom 31 22 
Rashid 22 19 
Sarah 18 22 
Ricardo 90 27 

我想這個分成三個矢量,<name><x><y>

ifstream in ("data.txt"); 
vector<string> names; 
string name; 
if (!in) 
    return; 
while (in >> name) 
    names.push_back(name); 

然後xy相同,但是與vector<int>相同。

因爲它代表該代碼會讀的所有單詞到names並將其看作字符串。我需要做一些數學xy,所以我需要他們作爲類型int。

我想使用的倍數,但我敢肯定有一個更好的解決方案。如,y總會有一次讀入names,提供我創造names[0]一個空的第一個位置的索引由三個完全除盡。有人可以幫我嗎?

KR

+1

你有沒有考慮定義結構和使用單一載體,而不是一個簡單的轉換功能?那就是說,你目前的解決方案是什麼?你有什麼嘗試?網站指南要求的最小示例在哪裏? –

回答

1

如何:

... 
vector <int> x; 
vector <int> y; 
... 
... 
int num_x, num_y; 
while (in >> name >> num_x >> num_y){ 
    names.push_back(name); 
    x.push_back(num_x); 
    y.push_back(num_y); 
} 

有不同的方式。但是,比如,你可以再訪問內容是這樣的:

for(int i=0; i<names.length(); i++){ 
    cout << "index " << i << " names: "<< names[i] << ", x:" << x[i] << ", y:" << y[i] << "\n"; 
} 
+0

如果輸入操作失敗會怎麼樣? –

+0

@dingalapadum:不夠公平:編輯您可以使用另一個變量,做',而(在>>名稱>> NUM1 NUM2 >>)' – Blastfurnace

+0

@Blastfurnace解決這個問題。 – dingalapadum

0

我會建議服用輸入,如線(getline()istringstream())串線,解析輸入(Split string with delimiters in C),然後將其推入您的載體。如果你需要轉換,運行如atoi()