从.txt文件中计数整数

C++ - Count integers from .txt file

本文关键字:整数 txt 文件      更新时间:2023-10-16

我想从.txt文件名为"示例。in",其中包含(例如):

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.)
}

打开文件时,应始终检查打开过程是否成功。我相信file_name.good()是一个完美的布尔函数。只需编写一个简单的if语句,看看它是否有效,就像这样:

 if(fin.good()) std::cout << "File opened!";
 else{ //do something when opening didn't work }

另外,我相信你还需要写"完整的文件名",在这种情况下(如果你的文件名恰好是"Example.in")将是"Example.in.txt"。

对于唯一整数问题,有两个解决方案:要么创建一个std::vector,存储已经从文件中读取的整数,每次尝试读取另一个整数时,检查它是否已经被读取(这里最快的算法将是快速/堆/合并排序+二进制搜索,而不是每次迭代)。总是当添加新的整数时,将count值增加1。

第二个解决方案是:只需将整数存储在vector中,并通过迭代和擦除来消除倍数。那么count就等于your_vector.size()

"打印每一个以新行开头的整数"是一个不同的问题。我会从使用while(fin >> i)切换到getline()功能。这样,文件的每一行都是字符串,可以转换成整行。对于while()循环,您不知道新行何时开始,因此不可能完成第二个任务(或者,在任务1之后,您可以再次打开文件并使用另一种算法,仅用于获取每行的第一个整数)

最后一件事:正如这里的许多人所说,强烈建议使用调试器。它节省了我思考问题的时间,只需一行一行地浏览代码。Codeblocks提供了一个非常好的调试器,所以我建议您简单地google一下Codeblocks调试器指南。甚至YouTube上也有一些相关的教程