【问题标题】:Read from a input file until a string appears in C++从输入文件中读取,直到字符串出现在 C++ 中
【发布时间】:2018-10-02 11:28:36
【问题描述】:

我有一个如下所示的输入文件 -

BEGIN
ABC
DEF
END
BEGIN
XYZ
RST
END

我必须提取从 BEGIN 到 END 的所有内容并将它们存储在一个字符串中。所以,从这个文件中,我将有两个字符串。我正在使用ifstream 来读取输入文件。我的问题是,如何解析输入文件以获取从一个 BEGIN 到下一个 END 的所有内容。 getline() 有字符作为分隔符,而不是字符串。我尝试的另一种方法是将输入文件中的所有内容复制到字符串,然后根据.find() 解析字符串。但是,在这种方法中,我只能得到第一个 BEGIN 到 END。

有什么方法可以将输入文件中的所有内容存储在一个字符串中,直到出现某个字符串(END)?

出于存储目的,我使用vector<string> 进行存储。

【问题讨论】:

    标签: c++ string file inputstream ifstream


    【解决方案1】:

    用正确的名称替换文件名。

    #include <fstream>
    #include <iostream>
    #include <iterator>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        char filename[] = "a.txt";
        std::vector<string> v;
        std::ifstream input(filename);
        string temp = "";
        for(std::string line; getline( input, line ); )
        {
            if(string(line) == "BEGIN")
                continue;
            else if(string(line) == "END")
            {
                v.push_back(temp);
                temp = "";
            }
            else
            {
                temp += string(line);
            }
    
        }
        for(int i=0; i<v.size(); i++)
            cout<<v[i]<<endl;
    }
    

    【讨论】:

      【解决方案2】:
      bool start = false;
      vector<string> v;
      
      while (...)
      {
        string line = ifs.getline();
        if (line == "START")
        {
          start = true;
          continue;
        }
        if (line == "END")
        {
          start = false;
          process(v);
          v.clear();
          continue;
        }
        if (start)
          v.push_back(line);
      }
      

      【讨论】:

      • process(v) 是 windows 函数吗?我正在使用 g++ 在 linux 上运行。它说流程未在此范围内声明。我不确定是不是这样。
      • @user3503711 当发现 BEGIN-END 运行时调用此函数,由您决定如何实现它。例如:void process(vector&lt;string&gt;&amp; arrayOfStrings) { for (const auto&amp; l : arrayOfStrings) cout &lt;&lt; l &lt;&lt; endl; }
      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2012-09-04
      • 2014-01-21
      • 1970-01-01
      相关资源
      最近更新 更多