2014-05-16 37 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_。 –