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

C++ में स्ट्रिंग में "1(0+)1" पैटर्न की घटनाओं की गिनती


हमें एक स्ट्रिंग str दी गई है जिसमें 0, 1 और अन्य वर्णमालाएं हैं। इसमें "1(0+)1" रूप के पैटर्न भी हैं जहां 0+ का अर्थ है लगातार 0 की कोई भी संख्या (>0)। लक्ष्य स्ट्रिंग str के अंदर ऐसे पैटर्न ("1(0+)1") को ढूंढना है।

आइए उदाहरणों से समझते हैं

इनपुट - str = "abb010bb10111011"

आउटपुट - स्ट्रिंग में "1(0+)1" पैटर्न की घटनाओं की गिनती - 2

व्याख्या - str के अंदर पैटर्न हाइलाइट किए गए हैं: "abb010bb10111011", "abb010bb10111011"

इनपुट - str = "01001011001001100"

आउटपुट - स्ट्रिंग में "1(0+)1" पैटर्न की घटनाओं की गिनती - 4

व्याख्या - str के अंदर पैटर्न हाइलाइट किए गए हैं: "01001011001001100", "01001011001001100", "01001011001001100", "01001011001001100"

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

यह देखा जा सकता है कि सभी पैटर्न 1 से शुरू और खत्म होते हैं। हम फ्लैग वेरिएबल check=1 का उपयोग करके पहले 1 को चिह्नित करेंगे और सभी 0 को छोड़ देंगे।

किसी अन्य वर्ण (न तो 0 और न ही 1) के लिए check को 0 सेट करें।

यदि हमें एक और 1 मिलता है और फ्लैग check 1 है तो देखें कि पिछला मान 0 है या नहीं। यदि हां तो गिनती बढ़ाएं क्योंकि पिछला 0 दो 1 के बीच में है। किसी गैर 0 या 1 के लिए check को फिर से 0 सेट करें।

  • इनपुट स्ट्रिंग को str के रूप में लें।
  • फ़ंक्शन Pattern_occurrences(string str, int length) स्ट्रिंग और उसकी लंबाई लेता है और स्ट्रिंग में "1(0+)1" पैटर्न की घटनाओं की गिनती वापस करता है
  • प्रारंभिक गिनती 0 लें।
  • फ्लैग वेरिएबल check को प्रारंभ में 0 लें।
  • फॉर लूप का उपयोग करके इंडेक्स i=0 से i
  • यदि वर्तमान वर्ण str[i] 1 है और check 0 है तो check को 1 सेट करें और जारी रखें।
  • यदि वर्तमान वर्ण str[i] 1 है और check 1 है। तो यह दूसरा 1 है। जांचें कि पिछला मान str[i-1] 0 है या नहीं। यदि हां तो पैटर्न मिला। गिनती बढ़ाएं।
  • यदि वर्तमान वर्ण न तो 0 है और न ही 1 तो यह कभी भी पैटर्न का हिस्सा नहीं होगा। check को 0 सेट करें। अब अगला मिला 1 अगले पैटर्न की शुरुआत माना जाएगा (यदि मौजूद है)।
  • अंत में गिनती में str के अंदर ऐसे पैटर्न की संख्या होगी।
  • परिणाम के रूप में गिनती वापस करें।

उदाहरण

#include<iostream> 
using namespace std; 

int Pattern_occurrences(string str, int length){ 
    int count = 0; 
    bool check = 0; 
    for (int i = 0; i < length ; i++){ 
        if (str[i] == '1' && check == 1){ 
            if (str[i - 1] == '0'){ 
                count++; 
            } 
        } 
        if (str[i] == '1' && check == 0){ 
            check = 1; 
            continue; 
        } 
        if (str[i] != '0' && str[i] != '1'){ 
            check = 0; 
        } 
    } 
    return count; 
} 

int main(){ 
    string str = "01010111011"; 
    int length = str.length(); 
    cout<<"Count of occurrences of a 1(0+)1 pattern in a string are: "<< Pattern_occurrences(str, length); 
    return 0; 
}

आउटपुट

Count of occurrences of a "1(0+)1" pattern in a string are: 3
  1. - C++ में बाइनरी स्ट्रिंग में हर जगह 1 के दो लगातार ऑकरेंस हैं या नहीं जांचें

    यहां हम एक और दिलचस्प समस्या देखेंगे। हमें एक ऐसा कोड लिखना है जो एक स्ट्रिंग स्वीकार करे, जिसमें निम्नलिखित मानदंड हों:लगातार 1s का हर ग्रुप लंबाई 2 का होना चाहिएलगातार 1s का हर ग्रुप 1 या अधिक 0s के बाद आना चाहिएमान लीजिए एक स्ट्रिंग है जैसे 0110, यह वैलिड स्ट्रिंग है, जबकि 001110, 010 वैलिड नहीं

  1. - C# में स्ट्रिंग में शब्द की घटनाओं की गिनती

    स्ट्रिंग में किसी विशिष्ट शब्द/सबस्ट्रिंग की घटनाओं (occurrences) की गिनती के लिए IndexOf मेथड का उपयोग करके लूप में खोज की जाती है। उदाहरण using System; class Program { static void Main() { string str = Hello World! Hello!; Console.WriteLine(Occurrence: + Check.CheckOccurrenc

  1. - पायथन में स्ट्रिंग में वर्ण की घटनाएं गिनें

    हमें एक स्ट्रिंग और एक वर्ण दिया गया है। हम यह पता लगाना चाहते हैं कि दिया गया वर्ण दी गई स्ट्रिंग में कितनी बार दोहराया जाता है। range और len के साथ हम सूचकांक का उपयोग करके स्ट्रिंग में मौजूद प्रत्येक वर्ण से वर्ण का मिलान करने के लिए एक फॉर लूप डिज़ाइन करते हैं। range और len फ़ंक्शन हमें यह निर्