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

C++ में स्ट्रिंग में ढूंढें और बदलें


मान लीजिए हमारे पास एक स्ट्रिंग S है, हम कुछ प्रतिस्थापन ऑपरेशन करेंगे जो अक्षरों के समूहों को नए के साथ बदलते हैं। प्रत्येक प्रतिस्थापन ऑपरेशन में 3 पैरामीटर होते हैं - एक प्रारंभिक इंडेक्स i, एक स्रोत शब्द x और एक लक्ष्य शब्द y। अब नियम यह है कि यदि x मूल स्ट्रिंग S में स्थिति i पर शुरू होता है, तो हम x की उस घटना को y से बदल देंगे। अन्यथा, हम कुछ नहीं करते।

तो एक उदाहरण के रूप में, विचार करें, यदि हमारे पास S = "abcd" है और हमारे पास कुछ प्रतिस्थापन ऑपरेशन i = 2, x = "cd", y = "ffff" है, तो क्योंकि "cd" मूल स्ट्रिंग S में स्थिति 2 पर शुरू होता है, हमें इसे "ffff" से बदलना होगा।

आइए S = "abcd" पर एक और उदाहरण देखें, यदि हमारे पास प्रतिस्थापन ऑपरेशन i = 0, x = "ab", y = "eee" दोनों हैं, साथ ही एक और प्रतिस्थापन ऑपरेशन i = 2, x = "ec", y = "ffff", यह दूसरा ऑपरेशन कुछ नहीं करता क्योंकि मूल स्ट्रिंग में S[2] = 'c', जो x[0] = 'e' से मेल नहीं खाता।

तो यदि हमारे पास एक स्ट्रिंग S = "abcd" है, इंडेक्स = [0,2] और स्रोत = ["a", "cd"], और लक्ष्य = ["eee", "ffff"], तो आउटपुट "eeebffff" होगा। ऐसा इसलिए है क्योंकि "a" S में स्थिति 0 पर शुरू होता है, इसलिए इसे "eee" से बदल दिया जाता है। अब "cd" S में इंडेक्स 2 पर शुरू होता है, इसलिए इसे "ffff" से बदल दिया जाता है।

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

  • जोड़ियों की एक सरणी परिभाषित करें, जिसे सॉर्टेड कहा जाता है, n := इंडेक्स सरणी का आकार
  • i को 0 से n - 1 की रेंज में
    • (indexes[i], i) जोड़ी को सॉर्टेड में डालें।
  • सॉर्टेड को रिवर्स ऑर्डर में सॉर्ट करें
  • j को 0 से n - 1 की रेंज में
    • i := जोड़ी सॉर्टेड[j] का पहला मान
    • src := sources[जोड़ी सॉर्टेड[j] का दूसरा मान]
    • target := targets[जोड़ी सॉर्टेड[j] का दूसरा मान]
    • यदि इंडेक्स i से स्रोत के आकार - 1 तक S का सबस्ट्रिंग स्रोत के समान है, तो
      • S := (इंडेक्स 0 से i तक S का सबस्ट्रिंग) संयोजित लक्ष्य, संयोजित (i से स्रोत के आकार - 1 तक S का सबस्ट्रिंग)
  • S लौटाएं

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, 
        vector<string>& targets) {
        vector < pair <int, int> > sorted;
        int n = indexes.size();
        for(int i = 0; i < n; i++){
            sorted.push_back({indexes[i], i});
        }
        sort(sorted.rbegin(), sorted.rend());
        for(int j = 0; j < n; j++){
            int i = sorted[j].first;
            string source = sources[sorted[j].second];
            string target = targets[sorted[j].second];
            if(S.substr(i, source.size()) == source){
                S = S.substr(0, i) + target + S.substr(i + source.size());
            }
        }
        return S;
    }
};

main(){
    vector<int> v1 = {0, 2};
    vector<string> v2 = {"a", "cd"};
    vector<string> v3 = {"eee", "ffff"};
    Solution ob;
    cout << (ob.findReplaceString("abcd", v1, v2, v3));
}

इनपुट

"abcd" [0, 2] ["a", "cd"] ["eee", "ffff"]

आउटपुट

eeebffff

  1. - C++ में 2, 3 और 5 का सबसे बड़ा गुणक ज्ञात करें

    इस समस्या में, हमें आकार N की एक सरणी arr[] दी गई है जिसमें केवल एकल अंक होते हैं। हमारा कार्य 2, 3 और 5 का सबसे बड़ा गुणक ज्ञात करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट : arr[] = {1, 0, 5, 2} आउटपुट : 510 व्याख्या − संख्या 510 2, 3, 5 सभी से विभाज्य है। समाधान दृष्टिकोण समस्

  1. - C++ में स्ट्रिंग में पहला दोहराया गया शब्द ज्ञात करें

    इस समस्या में, हमें अल्पविराम से अलग किए गए शब्दों से युक्त एक स्ट्रिंग str दी गई है। हमारा कार्य स्ट्रिंग में पहला दोहराया गया शब्द ज्ञात करना है। हमें पहला शब्द ढूंढना है दो स्पेस के बीच की स्ट्रिंग जो स्ट्रिंग में दोहराया जाता है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट : str = C program

  1. C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना

    इस लेख में, आप एक दी गई स्ट्रिंग में बनने वाले सबस्ट्रिंग्स (गैर-खाली) की संख्या निकालने के दृष्टिकोण के बारे में जानेंगे।इनपुट: string = moon आउटपुट: 10 व्याख्या: सबस्ट्रिंग्स हैं m, o, o, n, mo, oo, on, moo, oon और moon। इनपुट: string = yellow आउटपुट: 21समाधान खोजने का दृष्टिकोणमान लें स्ट्रिंग की