เราได้รับอาร์เรย์ของสตริง 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 loop จาก i=1 ถึง i
-
ใช้แต่ละสตริง str[i] เป็น s ให้ slen เป็น s.length()
-
ใช้ plen=ptr.lenght() รับแฟล็ก=1.
-
ตอนนี้กำหนด plen และ slen ทีละ 1 เพื่อรับดัชนีสุดท้ายของสตริง s และรูปแบบ ptr
-
ใช้ while loop ตรวจสอบจนเต็ม>=0.
-
หากมี s[slen]!=ptr[plen]. ตั้งค่า flag=0 และทำลายลูป มิฉะนั้นให้ลด plen และ slen เพื่อตรวจสอบอักขระถัดไปจากจุดสิ้นสุด
-
หลังจาก while สิ้นสุดลง หากแฟล็กยังคงเป็น 1 การเพิ่มขึ้นจะนับเป็น ptr เกิดขึ้นใน s
-
นับกลับหลังจากสิ้นสุดลูปทั้งหมดซึ่งเป็นจำนวนสตริงที่ลงท้ายด้วยรูปแบบที่กำหนด
ตัวอย่าง
#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