我有一个输入文件,如下所示 -
BEGIN
ABC
DEF
END
BEGIN
XYZ
RST
END
我必须提取从BEGIN到END的所有内容并将它们存储在一个字符串中。所以,从这个文件我有两个字符串。我正在使用ifstream
来读取输入文件。我的问题是,如何解析输入文件以获取从一个BEGIN到下一个END的所有内容。 getline()
具有字符作为分隔符,而不是字符串。我尝试的另一种方法是将输入文件中的所有内容复制到字符串,然后根据.find()
解析字符串。但是,在这种方法中,我只得到第一个BEGIN到END。
有什么方法可以将所有内容存储在输入文件的字符串中,直到出现某个字符串(END)?
出于存储目的,我使用vector<string>
进行存储。
答案 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);
}