Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm chuỗi kết thúc bằng mẫu cho trước trong C++


Cho mảng chuỗi str[] và chuỗi mẫu pat. Mục tiêu là tìm các phần tử chuỗi của str[] có mẫu pat ở cuối.

Ta sẽ duyệt từng chuỗi của str và so sánh các ký tự cuối với pat. Nếu khớp thì tăng biến đếm.

Hãy hiểu qua các ví dụ.

Đầu vào

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

Đầu ra

Số chuỗi kết thúc bằng mẫu cho trước: 2

Giải thích

Chuỗi "kitt-ens" và "h-ens" kết thúc bằng "ens".

Đầu vào

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

Đầu ra

Số chuỗi kết thúc bằng mẫu cho trước: 1

Giải thích

Chuỗi "wick-et" kết thúc bằng "et".

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận mảng chuỗi str[] và chuỗi mẫu pat.
  • N là số chuỗi trong str[].
  • Hàm endPattern(string str[], int n, string ptr) trả về số chuỗi trong str kết thúc bằng mẫu cho trước.
  • Khởi tạo biến count = 0.
  • Duyệt bằng vòng lặp for từ i=0 đến i<n.
  • Lấy từng chuỗi str[i] làm s. slen là s.length().
  • plen = ptr.length(). flag = 1.
  • Giảm plen và slen đi 1 để lấy chỉ số cuối của chuỗi s và mẫu ptr.
  • Dùng vòng lặp while kiểm tra cho đến plen >= 0.
  • Nếu bất kỳ s[slen] != ptr[plen]. Gán flag=0 và thoát vòng lặp. Ngược lại giảm plen và slen để kiểm tra ký tự tiếp theo từ cuối.
  • Sau khi while kết thúc, nếu flag vẫn là 1 thì tăng count vì ptr xuất hiện trong s.
  • Trả về count sau tất cả vòng lặp là số chuỗi kết thúc bằng mẫu cho trước.

Ví dụ

#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--; // chỉ số cuối
        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 << "Số chuỗi kết thúc bằng mẫu cho trước: " << endPattern(str, N, patrn);
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Số chuỗi kết thúc bằng mẫu cho trước: 3