Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 문자열에서 "1(0+)1" 패턴의 발생 횟수

<시간/>

0, 1 및 기타 알파벳을 포함하는 문자열 str 이 제공됩니다. 여기에는 "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도 아님)의 경우 검사를 0으로 설정합니다.

다른 1을 찾고 플래그 검사가 1이면 이전 값이 0인지 확인합니다. 그렇다면 이전 0만큼 증가 계수가 두 값 사이에 있습니다. 0 또는 1이 아닌 세트의 경우 다시 0으로 확인하십시오.

  • 입력 문자열을 str로 가져옵니다.

  • Function Pattern_occurrences(string str, int length)는 문자열과 문자열의 길이를 가져와 문자열에서 "1(0+)1" 패턴의 발생 횟수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 초기에 플래그 변수 검사를 0으로 합니다.

  • for 루프를 사용하여 인덱스 i=0에서 i까지 str을 순회합니다.

  • 현재 문자 str[i]가 1이고 검사가 0이면 검사를 1로 설정하고 계속하십시오.

  • 현재 문자 str[i]가 1이고 검사가 1이면 두 번째 문자 1입니다. 이전 값 str[i-1]이 0인지 확인합니다. 그렇다면 패턴을 찾았습니다. 증분 수.

  • 현재 문자가 0도 1도 아닌 경우 패턴의 일부가 아닙니다. 검사를 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