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

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

मान लीजिए कि हमारे पास स्ट्रिंग्स की एक सूची है। हमें एक एल्गोरिथम डिज़ाइन करना है जो स्ट्रिंग्स की सूची को एक स्ट्रिंग में एन्कोड कर सकता है। हमें एक डिकोडर भी बनाना होगा जो स्ट्रिंग्स की मूल सूची में वापस डिकोड करेगा। मान लीजिए कि हमारे पास इन मशीनों पर एन्कोडर और डिकोडर स्थापित है, और दो अलग-अलग कार्य इस प्रकार हैं -

मशीन 1 (प्रेषक) का कार्य है

string encode(vector<string< strs) {
   //code to read strings and return encoded_string;
}

मशीन 2 (रिसीवर) का कार्य है

vector<string< decode(string s) {
   //code to decode encoded_string and returns strs;
}

इसलिए, यदि इनपुट {"हैलो", "वर्ल्ड", "कोडिंग", "चैलेंज"} जैसा है, तो आउटपुट एन्कोडेड स्ट्रिंग 5#हैलो5#वर्ल्ड6#कोडिंग9#चैलेंज, डिकोडेड फॉर्म [हैलो, वर्ल्ड, कोडिंग , चुनौती, ]

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

  • एक फ़ंक्शन एन्कोड () को परिभाषित करें, यह एक सरणी स्ट्रिंग लेगा,

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

  • प्रारंभ करने के लिए मैं:=0, जब मैं

    • ret :=strs का ret concatenate size[i]

  • वापसी रिट

  • फ़ंक्शन getNext() को परिभाषित करें, इसमें x, प्रारंभ, s,

    लगेगा
  • idx :=आकार का

  • प्रारंभ करने के लिए i :=start, जब i

    • यदि s[i] x के समान है, तो -

      • आईडीएक्स:=मैं

      • लूप से बाहर आएं

  • वापसी आईडीएक्स

  • परिभाषित विधि डिकोड इसमें s

    . लगेगा
  • एक सरणी रिट परिभाषित करें

  • मैं :=0

  • n :=s का आकार

  • जबकि मैं

    • हैशपॉस :=getNext('#', i, s)

    • लेन:=(सूचकांक से s का प्रतिस्थापन (i से हैशपॉस - i - 1) पूर्णांक के रूप में

    • मैं :=हैशपॉस + 1

    • रिट के अंत में इंडेक्स से s का सबस्ट्रिंग डालें (i से len-1 तक)

    • मैं :=मैं + लेन

  • वापसी रिट

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Codec {
public:
   string encode(vector<string>& strs) {
      string ret = "";
      for (int i = 0; i < strs.size(); i++) {
         ret += to_string(strs[i].size()) + "#" + strs[i];
      }
      return ret;
   }
   int getNext(char x, int start, string s){
      int idx = s.size();
      for (int i = start; i < s.size(); i++) {
         if (s[i] == x) {
            idx = i;
            break;
         }
      }
      return idx;
   }
   vector<string> decode(string s) {
      vector<string> ret;
      int i = 0;
      int n = s.size();
      while (i < n) {
         int hashPos = getNext('#', i, s);
         int len = stoi(s.substr(i, hashPos - i));
         i = hashPos + 1;
         ret.push_back(s.substr(i, len));
         i += len;
      }
      return ret;
   }
};
main(){
   Codec ob;
   vector<string> v = {"hello", "world", "coding", "challenge"};
   string enc = (ob.encode(v));
   cout << "Encoded String " << enc << endl;
   print_vector(ob.decode(enc));
}

इनपुट

{"hello", "world", "coding", "challenge"}

आउटपुट

Encoded String 5#hello5#world6#coding9#challenge
[hello, world, coding, challenge, ]

  1. सी ++ में विभाजित कॉनटेनेटेड स्ट्रिंग्स

    मान लीजिए कि हमारे पास स्ट्रिंग्स की एक सूची है, हम इन स्ट्रिंग्स को एक लूप में एक साथ जोड़ सकते हैं, जहां प्रत्येक स्ट्रिंग के लिए हम इसे उल्टा करना चुन सकते हैं या नहीं। सभी संभावित लूपों में से, हमें लूप को काटने के बाद लेक्सिकोग्राफ़िक रूप से सबसे बड़ी स्ट्रिंग ढूंढनी होगी, जो लूप वाली स्ट्रिंग

  1. दो स्ट्रिंग्स को गुणा करने और C++ में स्ट्रिंग के रूप में परिणाम लौटाने का प्रोग्राम

    मान लीजिए कि हमारे पास स्ट्रिंग के रूप में दो नंबर हैं। हमें उन्हें गुणा करना होगा और परिणाम को भी स्ट्रिंग में वापस करना होगा। इसलिए यदि संख्याएं 28 और 25 हैं, तो परिणाम 700 होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - दो तर्क x और y लेते हुए यह इंगित करता है कि x, y को विभाजित करता है

  1. C++ में दो बाइनरी स्ट्रिंग्स जोड़ने का प्रोग्राम

    बाइनरी नंबर के साथ दो स्ट्रिंग्स को देखते हुए, हमें उन दो बाइनरी स्ट्रिंग्स को जोड़कर प्राप्त परिणाम को खोजना होगा और परिणाम को बाइनरी स्ट्रिंग के रूप में वापस करना होगा। बाइनरी नंबर वे नंबर होते हैं जिन्हें या तो 0 या 1 के रूप में व्यक्त किया जाता है। 2 बाइनरी नंबर जोड़ते समय बाइनरी जोड़ नियम होता