Tìm chuỗi con xuất hiện trong chuỗ

Một phần của tài liệu Bài giảng LẬP TRÌNH C CƠ BẢN (HỆ CAO ĐẲNG CHUYÊN NGHIỆP) (Trang 83 - 84)

CHƯƠNG 4: LẬP TRÌNH VỚI DỮ LIỆU CÓ CẤU TRÚC

4.2.2.7Tìm chuỗi con xuất hiện trong chuỗ

Ví dụ: chuỗi con “chua an” xuất hiện ở vị trí thứ 8 trong chuỗi “toi con chua an com”. Từ nhận xét trên, ta có thuật toán tìm vị trí xuất hiện của chuỗi con t trong chuỗi s:

BĐ = 0; l_t = độ dài của t;

Trong khi (còn tìm được trong s (từ BĐ) vị trí vt đầu tiên xuất hiện t[0])

o Trích chuỗi con r từ s chứa l_t ký tự bắt đầu từ vt.

o nếu độ dài của r < l_t thì dừng thuật toán với kết luận không có t trong s.

o nếu r bằng t thì dừng thuật toán với kết luận vị trí xuất hiện t trong s là vt. o Ngược lại, BĐ = vt+1. Minh họa: Cài đặt:  int tim_chuoi_con (s, t) // Hàm (11) { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 t o i c o n c h u a a n c o m \0

bd = 0, l_t = dodai(t); vt = tim_vt_ktu (s, t[0], bd); while (vt != -1) { trich_chuoi_con (s, vt, l_t, r); if (l_t > dodai(r))

return -1; // không có t trong s if (so_sanh_chuoi (t, r) == 0)

return vt; bd = vt+1;

vt = tim_vt_ktu (s, t[0], bd); }

return -1; // không có t trong s }

Ví dụ 4.6: Trích ra tên, họ và chữ lót từ họ và tên đầy đủ. Chẳng hạn với họ và tên đầy đủ “nguyen van teo”, ta có kết quả trích gồm ba chuỗi ho = “nguyen”, lot = “van”, ten = “teo”.

Để trích họ, chữ lót, tên từ chuỗi họ và tên s ta cần thực hiện bốn bước:

(B1) Tìm ra vị trí hai khoảng trắng phân cách: họ và chữ lót (vtkt_dautien), chữ lót và tên (vtkt_cuoicung).

(B2) Trích chuỗi con xuất hiện trong s tính từ vị trí thứ 0 đến vị trí vtkt_dautien-1 đưa vào ho.

(B3) Trích chuỗi con xuất hiện trong s tính từ vị trí vtkt_dautien+1 đến vị trí vtkt_cuoicung-1 đưa vào lot.

(B4) Trích chuỗi con xuất hiện trong s tính từ vị trí vtkt_cuoicung+1 đến vị trí cuối cùng đưa vào ten.

Minh họa:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14n g u y e n v a n t e o ‘\0’

Một phần của tài liệu Bài giảng LẬP TRÌNH C CƠ BẢN (HỆ CAO ĐẲNG CHUYÊN NGHIỆP) (Trang 83 - 84)