假设我有一个带有"的文本文件:"作为分隔符,我如何找到每列的平均值?对于例如对于第三列,第一列将是(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的用途。我们不是来调试你的程序。相反,我会回答你真正的问题:
如何调试这样的简单程序?
一次一步地构建解决方案,验证每个步骤是否按预期工作。我认为你的问题是你想要一次性做很多事。
编写一个简单的程序,它不会读取任何文件,但是你已经硬编码了一行。说:char line[] = "3:290:61:100:"
。将其拆分为单独的数字并写出来。
当有效时,尝试将数字的每个字符串转换为int
并添加它们。打印出结果。
将您的工作代码转换为一个函数,将一行作为参数并返回总和。
下一步是创建一个包含多行的字符串,如下所示:
char text[] = "3:290:61:100:\n"
"2:50:\n"
"5:346:87:\n"
获取每一行并重复使用您在陡峭3中创建的功能。
我希望你能看到它的发展方向。从简单开始,一次解决一个问题,并将每个已解决的子任务放入可重用的函数中。我经常看到人们试图解决一个大问题。
如果你想使用getline
和类似的功能,请通过编写非常简单的程序来验证它们是否能够正常运行。在程序中输入cout
或printf
语句,以输出程序中各个阶段的结果,以验证您的程序是否符合您的预期。