2014-05-16 49 views
-5

假設我有一個以「:」作爲分隔符的文本文件,我如何找到每列的平均值?對於例如第三列爲(3 + 2 + 5)/ 3,第二列爲(61 + 87)/ 2。從文本文件中找到平均值

我曾嘗試在while循環中使用getline,但它似乎更復雜,因爲我認爲它需要比這更多。如果有人能夠就此進行啓發,我將不勝感激。謝謝!

Sample text file 
================ 
3:290:61:100: 
2:50: 
5:346:87: 

當前代碼

void IDS::parseBase() { 



string temp = ""; 
int counting = 0; 
int maxEvent = 0; 
int noOfLines = 0; 
vector<string> baseVector; 


ifstream readBaseFile("Base-Data.txt"); 
ifstream readBaseFileAgain("Base-Data.txt"); 




while (getline(readBaseFile, temp)) { 

    baseVector.push_back(temp); 

} 
readBaseFile.close(); 

//Fine the no. of lines 
noOfLines = baseVector.size(); 

//Find the no. of events 
for (int i=0; i<baseVector.size(); i++) 
{ 
    counting = count(baseVector[i].begin(), baseVector[i].end(), ':') - 1; 

    if (maxEvent < counting) 
    { 
     maxEvent = counting; 
    } 

} 


//Store individual events into array  
string a[maxEvent]; 



while (getline(readBaseFileAgain, temp)) { 
    stringstream streamTemp(temp); 

    for (int i=0; i<maxEvent; i++) 
    { 
     getline(streamTemp, temp, ':'); 
     a[i] += temp + "\n"; 


    } 


} 

}

+0

調試第一,以縮小你的問題,因爲請問這裏請! –

+1

閱讀一下關於如何計算stackoverflow的問題。這不是爲了解決您的編程任務而提供的服務。答案應該有更多的一般應用,並且對很多人有用。 –

回答

1

我不會給予直接回答這個問題,因爲這不是什麼#1對。我們不是在這裏調試你的程序。相反,我會回答什麼是你的問題:

如何調試這樣一個簡單的程序?

一次構建您的解決方案一步一步,驗證每一步都按預期工作。我認爲你的問題是你一直在努力做很多事情。

  1. 寫一個簡單的程序,它不讀取任何文件,但是在哪裏硬編碼了一行。說:char line[] = "3:290:61:100:"。將其分成單獨的數字並寫出。

  2. 當這項工作嘗試將數字的每個字符串轉換爲int並添加它們。打印結果。

  3. 將您的工作代碼轉換爲一個函數,將一行作爲參數並返回總和。

  4. 下一個步驟是創建多行這樣的字符串: char text[] = "3:290:61:100:\n" "2:50:\n" "5:346:87:\n" 獲取每根線和重用你在陡峭的3

創建我希望你看到的函數,其中,這是去。從簡單開始,一次解決一個問題,並將每個解決的子任務放入一個可重用的函數中。我經常看到人們試圖繞過一個大問題。

如果你想使用getline和類似的功能,驗證他們的工作方式,通過編寫非常簡單的程序來認爲他們工作。在程序中輸入coutprintf語句以輸出程序中各個階段的結果,以驗證您的程序是否按照您認爲的那樣進行。

+1

+1這個問題看起來註定要失敗,但仍然是一個好主意,用穴居人調試能力來解決OP問題;)...可能至少會得到一個_panic accept_。 –