문자열 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