在getline之后在C ++中浏览一行内的单词
Posted
技术标签:
【中文标题】在getline之后在C ++中浏览一行内的单词【英文标题】:Browse words within a line in C++ after getline 【发布时间】:2021-07-16 00:25:45 【问题描述】:是否可以用getline提取一行的每个单词?
例如,将此示例作为“test.txt”文件:
18407111 2018-07-05 00:04:02 MHAM EIDW 42 S1REB RYR5GW 3726 JNEIE 837B Datum RYR IFR Undefined 1 1 2018-07-05 00:15:38 2018-07-05 00:22:56 111 extended
0.0 113416.9 479798.5 -0.2 3.6 0.0
我可以使用 getline(file,line) 获取循环中的第一行,但从这一行开始,我想浏览其中以“18407111”开头的每个“单词”。
我尝试了一些东西,但我只设法得到了第一个单词。
#include <iostream>
#include <fstream>
main()
int info[100][6] = 0;
int i =0, j;
std::ifstream file "test.txt";
std::string line;
std::string word;
while (getline(file,line))
word = line.substr(0, line.find(" "));
std::cout << word << "\n";
std::stoi(word)>> info[i][0];
i++;
return 0;
我需要将这些数据分开以便像这样使用它:
18407111
2018
07
05
00
04
02
MHAM
etc...
【问题讨论】:
请不要标记垃圾邮件。您的问题不是关于任何这些特定的 C++ 版本,而是关于通用 C++。我已经删除了过多的、不适用的标签。 为什么首先使用getline
?为什么不只是while (file >> word)
?
@KamilCuk 因为当我使用 file >> word 时,我无法在 "0.0 113416.9 479798.5 -0.2 3.6 0.0" 之后将所有数据存储在一个数组中,因为它要么跳过第一个或循环的最后一个值
【参考方案1】:
只需使用stringstream
并阅读单词。
while (getline(file,line))
std::istringstream ss(line);
std::string word;
while (ss >> word)
std::cout << "This is the word: " << word << "\n";
但无论如何你都可以直接while (file >> word)
。
【讨论】:
考虑使用std::istringstream
而不是std::stringstream
What's the difference between istringstream, ostringstream and stringstream? / Why not use stringstream in every case? -- 我也很好奇。症结,i/o...
提供了清晰的意图表达,stringstream
本身会更大且效率略低(强调稍微 - 尽管链接问题中没有提供时间或内存比较)跨度>
感谢您的回答。不应该是while (ss>>line)
吗?我不能使用文件>>单词,因为当我存储数据时它可以跳过单词
@Random 是的,应该是!以上是关于在getline之后在C ++中浏览一行内的单词的主要内容,如果未能解决你的问题,请参考以下文章
c#Office Interop在循环浏览大文档中的每个单词时缓慢
如何使用Linux终端(如python,在gcc或g ++中编译一行C ++代码?