Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में HTML एंटिटी पार्सर


मान लीजिए हमारे पास एक स्ट्रिंग है; हमें एक HTML पार्सर डिज़ाइन करना है जो HTML सिंटैक्स के विशेष कैरेक्टर को सामान्य कैरेक्टर में बदल देगा। HTML एंटिटी पार्सर वह पार्सर है जो HTML कोड को इनपुट के रूप में लेता है और विशेष कैरेक्टर्स की सभी एंटिटी को कैरेक्टर स्वयं से बदल देता है। ये HTML के लिए विशेष कैरेक्टर और उनकी एंटिटी हैं:

  • कोटेशन मार्क - एंटिटी है " और सिंबल कैरेक्टर है "।

  • सिंगल कोट मार्क - एंटिटी है ' और सिंबल कैरेक्टर है '।

  • एम्परसैंड - एंटिटी है & और सिंबल कैरेक्टर है &।

  • ग्रेटर दैन साइन - एंटिटी है > और सिंबल कैरेक्टर है >।

  • लेस दैन साइन - एंटिटी है < और सिंबल कैरेक्टर है <।

  • स्लैश - एंटिटी है ⁄ और सिंबल कैरेक्टर है /।

इसलिए, यदि इनपुट है "& is changed but &ambassador; is not.", तो आउटपुट होगा "& is changed but &ambassador; is not."

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • एक ऐरे v = स्पेस का उपयोग करके स्ट्रिंग को विभाजित करके इनिशियलाइज़ करें

  • ret := खाली स्ट्रिंग

  • एक मैप m परिभाषित करें, जो सभी HTML सिंबल को कुंजी और संबंधित विशेष कैरेक्टर को मान के रूप में रखेगा

  • i := 0 से शुरू करें, जब i < v का आकार, i बढ़ाते हुए, करें -

    • s := v[i]

    • temp := खाली स्ट्रिंग

    • n := v[i] का आकार

    • k := 0

    • जब k < n, करें -

      • यदि v[i, k], '&' के समान है, तो -

        • temp := temp + v[i, k]

        • (k को 1 से बढ़ाएं)

        • जब (k < n और v[i, k], ';' के बराबर नहीं है), करें -

          • temp := temp + v[i, k]

          • (k को 1 से बढ़ाएं)

        • temp := temp + v[i, k]

        • (k को 1 से बढ़ाएं)

        • यदि temp, m का सदस्य है, तो -

          • ret := ret + m[temp]

        • अन्यथा

          • ret := ret + temp

        • temp := खाली स्ट्रिंग

      • अन्यथा

        • ret := ret + v[i, k]

        • (k को 1 से बढ़ाएं)

    • यदि temp का आकार 0 नहीं है और temp, m का सदस्य है, तो -

      • ret := ret + m[temp]

    • अन्यथा जब temp का आकार, तो -

      • ret := ret + temp

    • यदि i, v के आकार के बराबर नहीं है, तो -

      • ret := ret + खाली स्थान

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; class Solution { public:    vector <string> split(string& s, char delimiter){       vector <string> tokens;       string token;       istringstream tokenStream(s);       while(getline(tokenStream, token, delimiter)){          tokens.push_back(token);       }       return tokens;    }    void out(vector <string> v){       for(string s : v) cout << s << endl;    }    string entityParser(string text) {       vector<string> v = split(text, ' ');       string ret = "";       map<string, string> m;       m["&quot;"] = "\"";       m["&apos;"] = "'";       m["&amp;"] = "&";       m["&gt;"] = ">";       m["&lt;"] = "<";       m["&frasl;"] = "/";       for (int i = 0; i < v.size(); i++) {          string s = v[i];          string temp = "";          int n = v[i].size();          int k = 0;          while (k < n) {             if (v[i][k] == '&') {                temp += v[i][k];                k++;                while (k < n && v[i][k] != ';') {                   temp += v[i][k];                   k++;                }                temp += v[i][k];                k++;                if (m.count(temp))                   ret += m[temp];                else                   ret += temp;                temp = "";             }             else {                ret += v[i][k];                k++;             }          }          if (temp.size() && m.count(temp)) {             ret += m[temp];          }          else if (temp.size())             ret += temp;          if (i != v.size() - 1)             ret += " ";       }       return ret;    } }; main(){    Solution ob;    cout << (ob.entityParser("& is changed but &ambassador; is not.")); }

इनपुट

"& is changed but &ambassador; is not."

आउटपुट

& is changed but &ambassador; is not.

  1. - C++ में String at() फंक्शन

    सारांश यह संक्षिप्त ट्यूटोरियल स्ट्रिंग से कैरेक्टर्स के अनुक्रम को एक्सेस करने के लिए C++ स्ट्रिंग क्लास at() फंक्शनैलिटी का अवलोकन है। आगामी सेक्शन में, एक इच्छुक पाठक स्ट्रिंग क्लास प्रोग्रामिंग उदाहरणों के माध्यम से at() फंक्शन्स के मैनिपुलेशन की पूरी समझ प्राप्त कर सकता है। स्ट्रिंग क्लास प्रोग

  1. - C++ में स्ट्रिंग को टोकनाइज़ करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकनाइज़ किया जाए। C में हम कैरेक्टर सरणी के लिए strtok() फंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से किसी डिलीमीटर का उपयोग करके स्ट्रिंग को कैसे काटा जाए। C++ सुविधा का उपयोग करने के लिए, हम

  1. - C++ में स्ट्रिंग को टोकनाइज़ कैसे करें?

    पहला तरीका शब्दों को स्पेस से अलग करके पढ़ने के लिए stringstream का उपयोग करना है। यह थोड़ा सीमित है लेकिन अगर आप उचित चेक प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; int main() {