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

C++에서 주어진 패턴으로 끝나는 문자열 세기

<시간/>

문자열 str[]과 패턴 문자열 pat의 배열이 제공됩니다. 목표는 끝에 패턴이 있는 str[]의 문자열 요소를 찾는 것입니다.

str의 각 문자열을 탐색하고 마지막 문자를 pat와 비교합니다. 증분과 일치하는 경우

예를 들어 이해합시다.

입력

str[]={ “kittens”, “hens”, “deers”, “dogs” } pat=”ens”

출력

Strings that end with given pattern: 2

설명

Strings “kitt-ens” and “h-ens” end with “ens”.

입력

str[]={ “tickets”, “wickets”, “bats”, “cricket” } pat=”et”

출력

Strings that end with given pattern: 1

설명

Strings “wick-et” ends with “et”.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 문자열 배열 str[]과 패턴 문자열 pat.

  • N은 str[]의 문자열이 아닙니다.

  • 함수 endPattern(string str[], int n, string ptr)은 str에서 주어진 패턴으로 끝나는 문자열의 개수를 반환합니다.

  • 초기 변수 개수를 0으로 간주합니다.

  • for 루프를 사용하여 i=1에서 i까지 순회

  • 각 문자열 str[i]를 s로 사용합니다. slen을 s.length()로 설정합니다.

  • plen=ptr.lenght()를 사용합니다. 플래그=1을 가져옵니다.

  • 이제 문자열 s와 패턴 ptr의 마지막 인덱스를 얻기 위해 plen과 slen을 1씩 감소시킵니다.

  • plen>=0이 될 때까지 while 루프 검사를 사용합니다.

  • s[slen]!=ptr[plen]인 경우. flag=0을 설정하고 루프를 끊습니다. 그렇지 않으면 끝에서 다음 문자를 확인하기 위해 plen과 slen을 감소시킵니다.

  • while이 끝난 후 플래그가 여전히 1이면 s에서 ptr이 발생하므로 카운트가 증가합니다.

  • 주어진 패턴으로 끝나는 문자열의 카운트인 모든 루프가 끝난 후의 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int endPattern(string str[], int n, string ptr){
   int count=0;
   for(int i=0;i<n;i++){
      string s=str[i];
      int slen=s.length();
      int plen=ptr.length();
      int flag=1;
      slen--; //last index
      plen--;
      while(plen>=0){
         if(ptr[plen]!=s[slen]){
            flag=0;
            break;
         }
         plen--;
         slen--;
      }
      if(flag==1)
         { count++; }
   }
   return count;
}
int main(){
   string patrn = "pes";
   int N = 4;
   string str[] = { "stripes", "cars", "ripes", "pipes" };
   cout <<"Strings that end with given pattern: "<<endPattern(str,N,patrn);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Strings that end with given pattern: 3