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

सी ++ में स्ट्रिंग में खोजें और बदलें

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

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

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

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

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

  • जोड़ों की एक सरणी परिभाषित करें, जिसे क्रमबद्ध कहा जाता है, n:=अनुक्रमणिका सरणी का आकार
  • मैं के लिए 0 से n - 1 की सीमा में
    • एक जोड़ी (इंडेक्स[i], i) को सॉर्ट में डालें।
  • क्रमबद्ध को उल्टे क्रम में क्रमित करें
  • जे के लिए 0 से n - 1 की सीमा में
    • i :=जोड़ी का पहला मान सॉर्ट किया गया[j]
    • src :=स्रोत[सॉर्ट किए गए जोड़े का दूसरा मान[j]]
    • लक्ष्य :=लक्ष्य[क्रमबद्ध जोड़ी का दूसरा मान[j]]
    • यदि इंडेक्स i से S को सोर्स के साइज -1 में सबस्ट्रिंग सोर्स के समान है, तो
      • S :=(सूचकांक 0 से i तक S का सबस्ट्रिंग) लक्ष्य को जोड़ना, जोड़ना (स्रोतों के आकार में I से S का स्थानापन्न करना – 1)
  • वापसी एस

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

उदाहरण

#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 का सबसे बड़ा गुणज खोजना । समस्या को समझने के लिए एक उदाहरण लेते हैं, Input : arr[] = {1, 0, 5, 2} Output : 510 स्पष्टीकरण - The number 510 is divisible by all 2, 3, 5. समाधान दृष्टिकोण

  1. सी ++ में एक स्ट्रिंग में पहला दोहराया शब्द खोजें

    इस समस्या में, हम अल्पविराम से अलग किए गए शब्दों से मिलकर एक स्ट्रिंग स्ट्रिंग हैं। हमारा काम है एक स्ट्रिंग में दोहराए गए पहले शब्द को ढूंढना । हमें स्ट्रिंग में दोहराए जाने वाले पहले शब्द दो रिक्त स्थान के बीच की स्ट्रिंग को खोजने की जरूरत है। समस्या को समझने के लिए एक उदाहरण लेते हैं, Input :

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu