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

सी ++ में डीकोड स्ट्रिंग


मान लीजिए कि हमारे पास एक एन्कोडेड स्ट्रिंग है; हमें इसकी डीकोडेड स्ट्रिंग वापस करनी होगी। एन्कोडिंग के लिए नियम है:k[encoded_string], यह इंगित करता है कि वर्ग कोष्ठक के अंदर एन्कोडेड_स्ट्रिंग को ठीक k बार दोहराया जा रहा है। हम मान सकते हैं कि मूल डेटा में कोई संख्यात्मक वर्ण नहीं है और वह अंक केवल उन दोहराए गए नंबरों के लिए हैं, k। तो अगर इनपुट “1[ba]2[na]” जैसा है, तो आउटपुट “केला” होगा।

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

  • एक खाली स्टैक बनाएं, i सेट करें:=0
  • जबकि मैं <एक स्ट्रिंग का आकार
    • अगर s[i] ']' है
      • res :=स्टैक से एलीमेंट हटाएं और केवल वही स्ट्रिंग लें जो वर्गाकार कोष्ठक के अंदर है।
      • n :=0
      • जबकि स्टैक खाली नहीं है, और स्टैक टॉप एक संख्यात्मक वर्ण है, तो संख्याओं को समायोजित करें और वास्तविक पूर्णांक को n के रूप में बनाएं
      • जे के लिए 1 से n की सीमा में
        • x के लिए 0 से लेकर रेस के आकार तक
          • रिसाव [x] को स्टैक में डालें
    • अन्यथा s[i] स्टैक में डालें
    • मैं 1 से बढ़ाएँ
  • उत्तर:=एक खाली स्ट्रिंग
  • जबकि स्टैक खाली नहीं है
    • उत्तर:=स्टैक टॉप एलिमेंट + उत्तर
    • स्टैक से पॉप
  • वापसी उत्तर

उदाहरण (C++):

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string decodeString(string s) {
      stack <char> st;
      int i = 0;
      while(i<s.size()){
         if(s[i] == ']'){
            string res = "";
            while(st.top()!='['){
               res = st.top() + res;
               st.pop();
            }
            st.pop();
            int n = 0;
            int x = 1;
            while(!st.empty() && st.top()>='0' && st.top()<='9'){
               n = n + (st.top()-'0')*x;
               x*=10;
               st.pop();
            }
            for(int j = 1; j <= n; j++){
               for(int x = 0; x < res.size();x++){
                  st.push(res[x]);
               }
            }
         }
         else{
            st.push(s[i]);
         }
         i++;
      }
      string ans ="";
      while(!st.empty()){
         ans = st.top() + ans;
         st.pop();
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.decodeString("1[ba]2[na]");
}

इनपुट

"1[ba]2[na]"

आउटपुट

"banana"

  1. सी++ में () पर स्ट्रिंग

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

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

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

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

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