मेरे पास नीचे की तरह एक इनपुट फ़ाइल है -

BEGIN
ABC
DEF
END
BEGIN
XYZ
RST
END

मुझे BEGIN से END तक सब कुछ निकालना है और उन्हें एक स्ट्रिंग में स्टोर करना है। तो, इस फाइल से मेरे पास दो तार होंगे। मैं इनपुट फ़ाइल को पढ़ने के लिए ifstream का उपयोग कर रहा हूं। मेरा प्रश्न यह है कि मैं एक BEGIN से अगले END तक सब कुछ प्राप्त करने के लिए इनपुट फ़ाइल को कैसे पार्स कर सकता हूं। getline() में वर्ण सीमांकक है, स्ट्रिंग नहीं। मैंने कोशिश की एक और तरीका इनपुट फ़ाइल से एक स्ट्रिंग में सब कुछ कॉपी कर रहा था और फिर .find() के आधार पर स्ट्रिंग को पार्स कर रहा था। हालाँकि, इस पद्धति में, मुझे केवल पहला BEGIN to END मिलता है।

क्या कोई तरीका है कि मैं इनपुट फ़ाइल से एक स्ट्रिंग में सब कुछ स्टोर कर सकता हूं जब तक कि कोई निश्चित स्ट्रिंग प्रकट न हो (END)?

स्टोर करने के उद्देश्य से, मैं स्टोर करने के लिए vector<string> का उपयोग कर रहा हूं।

-1
user3503711 22 अप्रैल 2018, 10:58

2 जवाब

सबसे बढ़िया उत्तर

फ़ाइल नाम को उचित नाम से बदलें।

#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;
}
5
Arash Fatahzade 22 अप्रैल 2018, 11:21
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);
}
3
gabonator 22 अप्रैल 2018, 11:11