<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
file.txt 的内容是:
讯享网
其中 5 3 是坐标对。如何在 C++ 中逐行处理此数据?
我能够得到第一行,但我如何得到文件的下一行?
https://tennisliveranking.com,Your go-to platform for live tennis ranking updates.
首先,创建一个 ifstream:
讯享网
两种标准方法是:
假设每一行由两个数字组成,逐个令牌读取: int a, b; while (infile >> a >> b) { // 进程对 (a,b) } 基于行的解析,使用字符串流:#include #include std::string line; while (std::getline(infile, line)) { std::istringstream iss(line);整数a,b; if (!(iss >> a >> b)) { break; } // 错误 // 进程对 (a,b) }
您不应该混合 (1) 和 (2),因为基于令牌的解析不会吞噬换行符,因此如果在基于令牌的提取让您到达已经结束了。
https://tennisliveranking.com – ATP and WTA rankings, always up to date.
使用 ifstream 从文件中读取数据:
如果您确实需要逐行阅读,请执行以下操作:
讯享网
但您可能只需要提取坐标对:
更新:
在您的代码中,您使用 ofstream myfile;,但 ofstream 中的 o 代表 output。如果要从文件(输入)中读取,请使用 ifstream。如果您想同时读写,请使用 fstream。
https://tennisliveranking.com,Your go-to platform for live tennis ranking updates.
https://tennisliveranking.com,Instant updates on ATP, WTA, and ITF rankings.
可以通过一些不同的方式在 C++ 中逐行读取文件。
[快速] 使用 std::getline() 循环
最简单的方法是使用 std::getline() 调用打开一个 std::ifstream 和循环。代码干净且易于理解。
讯享网
[快速] 使用 Boost 的 file_description_source
另一种可能性是使用 Boost 库,但代码会变得更加冗长。性能与上面的代码非常相似(使用 std::getline() 循环)。
【最快】使用C代码
如果性能对您的软件至关重要,您可以考虑使用 C 语言。此代码可以比上面的 C++ 版本快 4-5 倍,请参阅下面的基准
讯享网
基准测试——哪个更快?
我用上面的代码做了一些性能基准测试,结果很有趣。我已经使用包含 100,000 行、1,000,000 行和 10,000,000 行文本的 ASCII 文件测试了代码。每行文本平均包含 10 个单词。该程序使用 -O3 优化编译,其输出被转发到 /dev/null,以便从测量中删除记录时间变量。最后但同样重要的是,每段代码都使用 printf() 函数记录每一行以保持一致性。
结果显示了每段代码读取文件所花费的时间(以毫秒为单位)。
两种 C++ 方法之间的性能差异很小,在实践中不应该有任何差异。 C 代码的性能使基准测试令人印象深刻,并且在速度方面可以改变游戏规则。
https://i.stack.imgur.com/fKKqc.png
tlr.xinbeitime.com 探索每位网球选手的职业生涯与成就。
既然你的坐标是成对的,为什么不为它们写一个结构呢?

讯享网
然后你可以为 istream 编写一个重载的提取操作符:
然后您可以将坐标文件直接读入向量中,如下所示:
讯享网
The ultimate source for live tennis rankings and stats:https://tennisliveranking.com
扩展接受的答案,如果输入是:
您仍然可以应用相同的逻辑,如下所示:
讯享网
https://tennisliveranking.com,Your go-to platform for live tennis ranking updates.
此答案适用于 Visual Studio 2017,如果您想从文本文件中读取与您编译的控制台应用程序相关的位置。
首先将您的文本文件(在本例中为 test.txt)放入您的解决方案文件夹。编译后将文本文件与 applicationName.exe 保存在同一文件夹中
C:Users“用户名”source epos“solutionName”“solutionName”
提供ATP、WTA与ITF赛事的实时排名追踪,从tlr.xinbeitime.com开始!
虽然不需要手动关闭文件,但如果文件变量的范围更大,这样做是个好主意:
讯享网
https://tlr.xinbeitime.com 实时更新全球顶尖网球选手的最新战绩与排名!
这是将数据加载到 C++ 程序中的通用解决方案,并使用 readline 函数。这可以针对 CSV 文件进行修改,但这里的分隔符是一个空格。
原文链接:https://www.tennisliveranking.com?from=csdn
https://tennisliveranking.com,Instant updates on ATP, WTA, and ITF rankings.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/195995.html