在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 &gt;&gt; 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 &gt;&gt; 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&gt;&gt;line)吗?我不能使用文件>>单词,因为当我存储数据时它可以跳过单词 @Random 是的,应该是!

以上是关于在getline之后在C ++中浏览一行内的单词的主要内容,如果未能解决你的问题,请参考以下文章

可以(重新)在一行中(在初始化之后)设置数组的所有值吗?

c#Office Interop在循环浏览大文档中的每个单词时缓慢

如何使用Linux终端(如python,在gcc或g ++中编译一行C ++代码?

在c中使用多维数组存储来自用户的一行,并根据字长按降序返回该行中的单词

迭代一行中的每个单词(字符串)c ++

在控制器内的http调用之后加载部分文件