Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ หารูปแบบทั้งหมดของ "1(0+)1" ในสตริงที่กำหนด

สมมติสตริงมีรูปแบบแบบ 1(0+)1 โดยที่ (0+) บ่งบอกถึงการเกิดของ 1 ติดต่อกันไม่ว่าง เราต้องหารูปแบบทั้งหมด รูปแบบอาจทับซ้อนกันได้ สตริงไม่จำเป็นต้องเป็นสตริงไบนารี อาจมีตัวเลขและตัวอักษรพิมพ์เล็กเท่านั้น สมมติสตริงเป็น 1101001 จะมีรูปแบบ 2 แบบ คือ 101 และ 1001

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ −

  • วนลูปผ่านทุกตัวอักษร c ในสตริง
  • เมื่อ c เป็น 1 เราจะวนจนกว่าสมาชิกจะเป็น 0
  • เมื่อสตรีมของ 0 จบ เราจะตรวจสอบว่าตัวอักษรถัดไปเป็น 1 หรือไม่
  • ขั้นตอนเหล่านี้จะทำซ้ำจนถึงท้ายสตริง

ตัวอย่าง

#include <iostream> 
using namespace std; 

int countBinPattern(string main_str) { 
    char last_char = main_str[0]; 
    int i = 1, counter = 0; 
    while (i < main_str.size()) { 
        if (main_str[i] == '0' && last_char == '1') { 
            while (main_str[i] == '0') 
                i++; 
            if (main_str[i] == '1') 
                counter++; 
        } 
        last_char = main_str[i]; 
        i++; 
    } 
    return counter; 
} 

int main() { 
    string str = "10010110000101"; 
    cout << "Number of substrings of pattern 1(0+)1 is: " << countBinPattern(str); 
}

ผลลัพธ์

Number of substrings of pattern 1(0+)1 is: 4