我想计算来自 .txt 文件的整数,名为"示例。在"中,其中包含(例如):
1 2 3 4 5
3 6 7
5 8
8 9 10 11
1。并返回11,在这种情况下(重复的整数计为1 - 仅限唯一数字计数)。此时,它只打印出0(我认为在此阶段打开文件存在问题)。
2。仅打印出每行中的第一个整数 - 1,3,5,8。
int integer_count(){
int count = 0;
int i;
ifstream fin;
fin.open("Example.in"); //.txt file
while(fin >> i)
{
count++;
}
fin.close();
return count; // In this case it should print 14 instead of 11,
because I didn't count out 3, 5 and 8 (which duplicates - haven't figured
out how to make unique count that would close eye for duplicates and
just count unique integers.)
}
答案 0 :(得分:0)
打开文件时,应始终检查打开过程是否成功。我相信file_name.good()
是一个完美的布尔函数。只需创建一个简单的if语句来查看它是否有效,就像那样:
if(fin.good()) std::cout << "File opened!";
else{ //do something when opening didn't work }
Additioanlly,我相信你还需要写'完整文件名',在这种情况下(如果你的文件名正是“Example.in”)将是“Example.in.txt”。
对于唯一的整数问题,有几个解决方案:要么创建一个std::vector
来存储已经从文件中读取的整数,每次尝试读取另一个时,检查它是否已被读取(这里的算法最快)将是快速/堆/合并排序+二进制搜索,而不是每次迭代)。始终在添加新整数时,将count
值增加1。
第二个解决方案是:只需将整数存储在向量中,然后通过迭代和擦除来消除倍数。然后count
就是your_vector.size()
。
“打印开始新行的每个整数”是一个不同的问题。我会从使用while(fin >> i)
切换到getline()
功能。这样,我将每行文件作为字符串,可以转换为整数行。使用while()
循环,您不知道新行何时出星,因此无法完成第二个任务(或者,在任务1之后,您可以再次打开文件并使用另一个算法仅用于获取第一个任务每一行的整数)
最后一件事:正如这里的许多人所说,强烈建议使用调试器。通过简单地逐行扫描代码,它节省了我几个小时的思考错误。 Codeblocks提供了一个非常好的调试器,因此我建议您只需google一个codeblocks调试器指南。甚至YouTube也有一些相关的教程。