কম্পিউটার টিউটোরিয়াল

স্ট্রিং-এ "1(0+)1" প্যাটার্নের ঘটনার গণনা (C++ প্রোগ্রাম)

আমাদের একটি স্ট্রিং str দেওয়া আছে যেটিতে ০, ১ এবং অন্যান্য অক্ষর রয়েছে। এটিতেও "1(0+)1" রূপের প্যাটার্ন রয়েছে যেখানে 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"

প্রোগ্রামে ব্যবহৃত পদ্ধতি

দেখা যায় সকল প্যাটার্ন ১ দিয়ে শুরু ও ১ দিয়ে শেষ হয়। আমরা প্রথম ১-কে একটি ফ্ল্যাগ ভেরিয়েবল check=1 দিয়ে চিহ্নিত করব এবং সকল ০ কিপ করব।

অন্য যেকোনো ক্যারেক্টার (০ বা ১ ছাড়া) পেলে check কে ০ সেট করব।

যদি আমরা অন্য একটি ১ পাই এবং ফ্ল্যাগ check ১ থাকে, তবে দেখব আগের মান ০ কিনা। যদি হ্যাঁ, তবে count বাড়াব কারণ পূর্বের ০ দুটি ১-এর মাঝপথে আছে। অন্য যেকোনো নন-০ বা নন-১ ক্যারেক্টারের জন্য check আবার ০ সেট করব। এরপর আগামি ১কে পরবর্তী প্যাটার্নের শুরু হিসেবে বিবেচনা করব (যদি থাকে)।

  • ইনপুট স্ট্রিং str নিন।
  • Pattern_occurrences(string str, int length) ফাংশন স্ট্রিং এবং এর দৈর্ঘ্য নেয় এবং "1(0+)1" প্যাটার্নের ঘটনার গণনা ফেরত দেয়।
  • আরম্ভিক গণনা ০ নিন।
  • ফ্ল্যাগ ভেরিয়েবল check ০ হিসেবে আরম্ভিক করুন।
  • for লুপ দিয়ে str ট্রভার্স করুন i=0 থেকে i
  • যদি বর্তমান ক্যারেক্টার str[i] '1' হয় এবং check ০ হয়, তবে check কে ১ সেট করুন এবং continue করুন।
  • যদি বর্তমান ক্যারেক্টার str[i] '1' হয় এবং check ১ হয়। তবে এটি দ্বিতীয় ১। চেক করুন আগের মান str[i-1] '0' কিনা। যদি হ্যাঁ, তবে প্যাটার্ন পাওয়া গেল। count বাড়ান।
  • যদি বর্তমান ক্যারেক্টার ০ বা ১ না হয়, তবে এটি কখনো প্যাটার্নের অংশ হবেনা। check কে ০ সেট করুন। এখন পাওয়া যাবে ১ কে পরবর্তী প্যাটার্নের শুরু হিসেবে বিবেচনা করা হবে (যদি থাকে)।
  • শেষে count-এ str-এ এমন প্যাটার্নের সংখ্যা থাকবে।
  • ফলাফল হিসেবে count ফেরত দিন।
C++ প্রোগ্রাম উদাহরণ
#include 
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++

  2. C++-এ বাইনারি স্ট্রিং-এ সব জায়গায় '১'র দুটি लगাতার আবির্ভাব আছে কিনা তা যাচাই করা

  3. C#-এ স্ট্রিংয়ে একটি শব্দের অকারেন্স গণনা

  4. পাইথনে স্ট্রিংয়ে নির্দিষ্ট ক্যারেক্টারের আকারেন্স কাউন্ট করা (Count occurrence of character in string)