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

सी++ में एचटीएमएल एंटिटी पार्सर

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

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

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

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

  • साइन से बड़ा - इकाई> है और प्रतीक वर्ण> है।

  • संकेत से कम - इकाई <है और प्रतीक वर्ण <.

    . है
  • स्लैश - इकाई ⁄ है और प्रतीक वर्ण / है।

इसलिए, यदि इनपुट "और बदल गया है लेकिन &राजदूत; नहीं है" जैसा है, तो आउटपुट "और बदल दिया जाएगा लेकिन &राजदूत; नहीं है।"

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

  • एक सरणी परिभाषित करें v =स्पेस का उपयोग करके स्ट्रिंग को विभाजित करके v प्रारंभ करें

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

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

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • एस:=वी[i]

    • अस्थायी:=खाली स्ट्रिंग

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

    • कश्मीर:=0

    • जबकि k

      • अगर v[i, k] '&' के समान है, तो -

        • अस्थायी:=अस्थायी + वी[i, k]

        • (के द्वारा 1 बढ़ाएँ)

        • जबकि (k

          • अस्थायी:=अस्थायी + वी[i, k]

          • (के द्वारा 1 बढ़ाएँ)

        • अस्थायी:=अस्थायी + वी[i, k]

        • (के द्वारा 1 बढ़ाएँ)

        • अगर अस्थायी एम का सदस्य है, तो -

          • रिट:=रिट + एम [अस्थायी]

        • अन्यथा

          • रिट :=रिट + टेम्प

        • अस्थायी:=खाली स्ट्रिंग

      • अन्यथा

        • रिट:=रिट + वी[i, k]

        • (के द्वारा 1 बढ़ाएँ)

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

      • रिट :=रिट कॉन्टेनेट एम [अस्थायी]

    • अन्यथा जब तापमान का आकार, तब -

      • रिट :=रेट कॉन्टेनेट टेम्प

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

      • ret :=ret concatenate रिक्त स्थान

  • वापसी रिट

उदाहरण

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

#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["""] = "\"";
      m["'"] = "\'";
      m["&"] = "&";
      m[">"] = ">";
      m["<"] = "<";
      m["⁄"] = "/";
      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++ स्ट्रिंग क्लास at() . का एक सिंहावलोकन है स्ट्रिंग से वर्णों के अनुक्रम तक पहुँचने के लिए कार्यक्षमता। आगामी खंड में, एक इच्छुक पाठक स्ट्रिंग क्लास प्रोग्रामिंग उदाहरणों के माध्यम से at() के हेरफेर की पूरी समझ प्राप्त कर सकता है। कार्य। स्ट्रिंग क्लास प्रोग्रामिंग श

  1. सी ++ में एक स्ट्रिंग को टोकन करना

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

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

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