从文本文件中查找平均值

时间:2014-05-16 17:14:26

标签: c++

假设我有一个带有"的文本文件:"作为分隔符,我如何找到每列的平均值?对于例如对于第三列,第一列将是(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";


    }


}

}

1 个答案:

答案 0 :(得分:1)

我不打算直接回答这个问题,因为这不是Stackoverflow的用途。我们不是来调试你的程序。相反,我会回答你真正的问题:

如何调试这样的简单程序?

一次一步地构建解决方案,验证每个步骤是否按预期工作。我认为你的问题是你想要一次性做很多事。

  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中创建的功能。

  5. 我希望你能看到它的发展方向。从简单开始,一次解决一个问题,并将每个已解决的子任务放入可重用的函数中。我经常看到人们试图解决一个大问题。

    如果你想使用getline和类似的功能,请通过编写非常简单的程序来验证它们是否能够正常运行。在程序中输入coutprintf语句,以输出程序中各个阶段的结果,以验证您的程序是否符合您的预期。