2014-11-06 85 views
0

我在這裏遇到了一些麻煩。我有一個看起來像這樣(這裏有一個片段)的文件使用iomanip格式化矢量輸出

Sophia F 22158 
Emma F 20791 
Isabella F 18931 
Jacob M 18899 
Mason M 18856 
Ethan M 17547 

,我希望把每個名稱,該名稱的相應數字爲單獨的載體。例如,我將有4個向量:女性姓名爲 1,女性號碼爲1,男性和男性數字相同。 (所以總共4個)

我有這段代碼,它將通過文件並將這些元素拉出並放入向量中。

for (int i = 0; i < numTimes; i++) { 
     getline (inputFile, inputLine); 
     ss.str(inputLine); //ss is a string stream 
     ss >> name >> gender >> popularity; 
     if (gender == 'M') { 
      mNames[i] = name; 
      mFrequency[i] = popularity; 
     } else if (gender == 'F') { 
      fNames[i] = name; 
      fFrequency[i] = popularity; 
     } 

     ss.clear(); 

    } 

,我用這個方法來打印出來:

cout << counter << " Most Popular Baby Names" << endl << endl; 
    cout << left << setw(15) << "Girls" ; 
    cout << right << setw(9) << "Frequency" <<"  "; 
    cout << left << setw(15) << "Boys"; 
    cout << right << setw(9) << "Frequency" << endl; 
    for (int i = 0; i < counter; i ++) { 
     cout << left << setw(15) << fNames[i] ; 
     cout << right << setw(9) << fFreq[i] <<"  "; 
     cout << left << setw(15) << mNames[i]; 
     cout << right << setw(9) << mFreq[i] << endl; 
    { 

但後來我得到這個輸出: http://i.stack.imgur.com/2x0ta.png

但我想它是這樣的: http://i.stack.imgur.com/OSIX9.png

所以我想我或者需要經過我打印之前,並刪除所有的空格/ 0在這些向量中,或者我需要在打印時檢查。有沒有人有任何指針?

+0

您需要對這兩個向量進行排序,然後打印出頂部5.我會建議在做這樣的事情時不要使用平行向量,而應使用OOP來完成此操作。 – smac89 2014-11-06 00:49:00

+0

如果您的'counter'元素少於'用'counter'零填充一個字符串數組(並且你想'打印'counter'元素),沒有辦法解決。考慮減少「櫃檯」數量的最大值,你可以在文件中找到 – 2014-11-06 00:54:21

+0

我很想學習一種更有效的方法,但我並沒有真正的知識,而且我的老師非常具體地使用4個向量來完成這個任務。文件中的名字已經被排序,所以有一些方法我可以這樣說: if(mFreq!= 0) mName [nextEmptyElement] = name; ? – amantonas 2014-11-06 00:54:22

回答

0

解決,謝謝你們。

我使用了兩個單獨的while循環,每個數組集合一個。在它們之間,我重新設置了ifstream回到開始。這樣,直到每個矢量有5個非零元素。