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

C++ में स्ट्रिंग्स को एनकोड और डिकोड करें - लंबाई-उपसर्ग एन्कोडिंग


समस्या विवरण

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

मशीन 1 (भेजने वाला) का फ़ंक्शन

string encode(vector<string> strs) { 
    // स्ट्रिंग्स पढ़ने और एन्कोडेड_स्ट्रिंग लौटाने का कोड 
}

मशीन 2 (प्राप्तकर्ता) का फ़ंक्शन

vector<string> decode(string s) { 
    // एन्कोडेड_स्ट्रिंग को डिकोड करके strs लौटाने का कोड 
}

उदाहरण के लिए, यदि इनपुट {"hello", "world", "coding", "challenge"} है, तो आउटपुट होगा: एन्कोडेड स्ट्रिंग 5#hello5#world6#coding9#challenge, डिकोडेड रूप [hello, world, coding, challenge, ]

समाधान दृष्टिकोण

लंबाई-उपसर्ग एन्कोडिंग (Length-Prefix Encoding):

  1. encode() फ़ंक्शन:
    • ret := खाली स्ट्रिंग
    • प्रत्येक स्ट्रिंग के लिए: ret += स्ट्रिंग की लंबाई + "#" + स्ट्रिंग
    • ret लौटाएं
  2. getNext() फ़ंक्शन: दिए गए वर्ण की अगली स्थिति ढूंढें
  3. decode() फ़ंक्शन:
    • ret सरणी परिभाषित करें
    • i := 0, n := s का आकार
    • जब i < n:
      • hashPos := getNext('#', i, s)
      • len := s के सबस्ट्रिंग (i से hashPos-i-1) को पूर्णांक में पार्स करें
      • i := hashPos + 1
      • s के सबस्ट्रिंग (i से len-1) को ret में जोड़ें
      • i := i + len
    • ret लौटाएं

C++ कार्यान्वयन

#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; 
    } 
}; 

int 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)); 
    return 0;
}

इनपुट

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

आउटपुट

Encoded String 5#hello5#world6#coding9#challenge [hello, world, coding, challenge, ]
  1. - C++ में संयोजित स्ट्रिंग्स को विभाजित करें

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

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

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

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

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