从输入文件中读取,直到字符串出现在C ++中

时间:2018-04-22 07:58:54

标签: c++ string file inputstream ifstream

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

BEGIN
ABC
DEF
END
BEGIN
XYZ
RST
END

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

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

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

2 个答案:

答案 0 :(得分:5)

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

#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;
}

答案 1 :(得分:3)

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