Xử lý chuỗi ký tự (String)
Trong chuyên đề này, chúng ta sẽ học và giải các bài tập liên quan đến chuỗi ký tự (string): tên, câu, mật khẩu, địa chỉ email… Gồm 2 phần: ôn lý thuyết chuỗi, sau đó thực hành 26 bài xếp từ dễ đến khó - ghép chuỗi, đếm ký tự, lấy chuỗi con, thay thế, tìm kiếm, tách câu thành danh sách từ…
Phần 1 - Lý thuyết: Chuỗi ký tự
Phần tiêu đề “Phần 1 - Lý thuyết: Chuỗi ký tự”Chuỗi là gì?
Phần tiêu đề “Chuỗi là gì?”Chuỗi là một dãy ký tự: chữ cái, chữ số, dấu cách, dấu câu… Ví dụ
Scratch, Nguyen Van An, abc123. Câu trả lời người dùng gõ vào khối
hỏi [] và đợi (lưu trong khối (trả lời)) luôn là một chuỗi. Các ký tự
trong chuỗi được đánh số từ 1: trong chuỗi Scratch, ký tự thứ 1 là
S, ký tự thứ 7 là h.
4 khối xử lý chuỗi
Phần tiêu đề “4 khối xử lý chuỗi”Cả 4 khối đều nằm trong nhóm Các toán tử (màu xanh lá). Xem thêm ở bài Toán tử.
(kết hợp [Xin chào, ] [Scratch!]) (ký tự thứ (1) của chuỗi [Scratch]) (độ dài của [Scratch]) <[Scratch] chứa ký tự [cra]?>
(kết hợp [] [])ghép 2 chuỗi thành 1:Xin chào, Scratch!. Muốn ghép 3 chuỗi trở lên thì lồng nhiều khối(kết hợp [] [])vào nhau.(ký tự thứ () của chuỗi [])lấy ra 1 ký tự ở vị trí cho trước. Nếu vị trí vượt quá độ dài chuỗi, khối trả về chuỗi rỗng.(độ dài của [])trả về số ký tự của chuỗi (tính cả dấu cách).<[] chứa ký tự []?>kiểm tra chuỗi thứ nhất có chứa chuỗi thứ hai hay không - chuỗi thứ hai có thể dài hơn 1 ký tự (craở ví dụ trên).
Duyệt qua từng ký tự
Phần tiêu đề “Duyệt qua từng ký tự”khi bấm vào @greenFlag hỏi [Nhập một chuỗi:] và đợi đặt [chuỗi v] thành (trả lời) đặt [i v] thành (1) lặp lại cho đến khi <(i) > (độ dài của (chuỗi))> nói (ký tự thứ (i) của chuỗi (chuỗi)) trong (0.5) giây thay đổi [i v] một lượng (1) end
Giống hệt cách duyệt danh sách - chỉ thay (kích thước của [danh sách v]) bằng (độ dài của []), và (phần tử thứ () của [danh sách v]) bằng (ký tự thứ () của chuỗi []).
Dựng một chuỗi mới (mẫu dùng lại nhiều lần)
Phần tiêu đề “Dựng một chuỗi mới (mẫu dùng lại nhiều lần)”đặt [kết quả v] thành [] đặt [i v] thành (1) lặp lại cho đến khi <(i) > (độ dài của (chuỗi))> đặt [kết quả v] thành (kết hợp (kết quả) (ký tự thứ (i) của chuỗi (chuỗi))) thay đổi [i v] một lượng (1) end
Ví dụ với chuỗi abc, biến (kết quả) lớn dần qua từng vòng lặp:
| Vòng lặp | (i) | Ký tự lấy ra | (kết quả) sau vòng lặp |
|---|---|---|---|
| Trước khi lặp | - | - | (rỗng) |
| 1 | 1 | a | a |
| 2 | 2 | b | ab |
| 3 | 3 | c | abc |
Bắt đầu từ một chuỗi rỗng (ô trống), rồi mỗi vòng (kết hợp [] []) thêm một
ký tự vào cuối - giống như “cộng dồn” nhưng với chữ. Đoạn trên chép lại
nguyên chuỗi; các bài phía dưới chỉ việc thêm nếu <> thì để chọn ký tự nào được
thêm, hoặc thêm ký tự khác vào.
Mẹo: kiểm tra ký tự thuộc nhóm nào
Phần tiêu đề “Mẹo: kiểm tra ký tự thuộc nhóm nào”<[0123456789] chứa ký tự (ký tự)?> <[aeiouy] chứa ký tự (ký tự)?>
Muốn biết một ký tự có phải chữ số (hay nguyên âm…) không, ta viết sẵn
cả nhóm thành một chuỗi mẫu rồi hỏi chuỗi mẫu có chứa ký tự đó không -
gọn hơn nhiều so với so sánh <() = ()> với từng giá trị rồi nối bằng <<> hoặc <>>.
Phần 2 - Thực hành: 26 bài xử lý chuỗi
Phần tiêu đề “Phần 2 - Thực hành: 26 bài xử lý chuỗi”Mỗi bài có đánh dấu độ khó: ⭐ dễ, ⭐⭐ trung bình, ⭐⭐⭐ khó. Học sinh tiểu học nên làm hết các bài ⭐ và ⭐⭐ (Nhóm 1-3); các bài ⭐⭐⭐ (Nhóm 4-5) dành cho học sinh THCS hoặc các bạn muốn thử thách thêm.
Nhóm 1: Làm quen với chuỗi
Phần tiêu đề “Nhóm 1: Làm quen với chuỗi”Chưa cần vòng lặp - chỉ dùng các khối chuỗi đã học ở Phần 1.
Bài 1: Ghép họ và tên ⭐
Phần tiêu đề “Bài 1: Ghép họ và tên ⭐”Hỏi họ, rồi hỏi tên của người dùng, sau đó nói họ tên đầy đủ (có dấu cách
ở giữa). Ví dụ họ Nguyen, tên An → Nguyen An.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 2: Lời chào theo tên ⭐
Phần tiêu đề “Bài 2: Lời chào theo tên ⭐”Hỏi tên người dùng, sau đó nói Xin chào An! Tên bạn có 2 ký tự.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 3: Ký tự đầu và ký tự cuối ⭐
Phần tiêu đề “Bài 3: Ký tự đầu và ký tự cuối ⭐”Nhập một chuỗi, nói ra ký tự đầu tiên và ký tự cuối cùng của chuỗi.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 4: Tên dài hay ngắn ⭐
Phần tiêu đề “Bài 4: Tên dài hay ngắn ⭐”Hỏi tên người dùng. Nếu tên có nhiều hơn 5 ký tự thì nói Tên của bạn khá dài!, ngược lại nói Tên của bạn ngắn gọn!.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Nhóm 2: Duyệt từng ký tự
Phần tiêu đề “Nhóm 2: Duyệt từng ký tự”Dùng vòng lặp để đi qua từng ký tự của chuỗi, đếm hoặc dựng dần một chuỗi mới.
Bài 5: Đánh số từng ký tự ⭐
Phần tiêu đề “Bài 5: Đánh số từng ký tự ⭐”Nhập một chuỗi, nói lần lượt từng ký tự kèm số thứ tự của nó. Ví dụ
Meo → 1: M, 2: e, 3: o.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 6: Lặp lại chuỗi N lần ⭐
Phần tiêu đề “Bài 6: Lặp lại chuỗi N lần ⭐”Nhập một chuỗi và số N, tạo chuỗi mới gồm chuỗi đó lặp lại N lần. Ví dụ
ha, N = 3 → hahaha.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 7: Đếm dấu cách ⭐
Phần tiêu đề “Bài 7: Đếm dấu cách ⭐”Nhập một câu, đếm xem câu đó có bao nhiêu dấu cách. Ví dụ toi di hoc có
2 dấu cách.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 8: Đếm chữ a ⭐
Phần tiêu đề “Bài 8: Đếm chữ a ⭐”Nhập một câu, đếm xem chữ a xuất hiện bao nhiêu lần. Ví dụ ba ma an na có 4 chữ a.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Nhóm 3: Kiểm tra và biến đổi chuỗi
Phần tiêu đề “Nhóm 3: Kiểm tra và biến đổi chuỗi”Kết hợp vòng lặp với nếu <> thì, mẹo chuỗi mẫu và mẫu dựng chuỗi mới để kiểm tra, xoá, thay thế ký tự.
Bài 9: Đếm chữ số trong chuỗi ⭐⭐
Phần tiêu đề “Bài 9: Đếm chữ số trong chuỗi ⭐⭐”Nhập một chuỗi bất kỳ, đếm xem có bao nhiêu ký tự là chữ số. Ví dụ
lop 6A2 nam 2025 có 6 chữ số.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 10: Tổng các chữ số trong chuỗi ⭐⭐
Phần tiêu đề “Bài 10: Tổng các chữ số trong chuỗi ⭐⭐”Nhập một chuỗi gồm cả chữ và số, tính tổng các chữ số xuất hiện trong
chuỗi. Ví dụ a1b2c3 → 1 + 2 + 3 = 6.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 11: Chèn dấu gạch giữa các ký tự ⭐⭐
Phần tiêu đề “Bài 11: Chèn dấu gạch giữa các ký tự ⭐⭐”Nhập một chuỗi, chèn dấu - vào giữa các ký tự. Ví dụ Scratch →
S-c-r-a-t-c-h.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 12: Xoá một ký tự khỏi chuỗi ⭐⭐
Phần tiêu đề “Bài 12: Xoá một ký tự khỏi chuỗi ⭐⭐”Nhập một chuỗi và một ký tự, xoá mọi lần xuất hiện của ký tự đó. Ví dụ
banana, xoá a → bnn.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 13: Thay thế ký tự ⭐⭐
Phần tiêu đề “Bài 13: Thay thế ký tự ⭐⭐”Nhập một chuỗi, ký tự cũ và ký tự mới, thay mọi ký tự cũ bằng ký tự mới.
Ví dụ banana, thay a bằng @ → b@n@n@.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 14: Lấy chuỗi con ⭐⭐
Phần tiêu đề “Bài 14: Lấy chuỗi con ⭐⭐”Nhập một chuỗi và hai vị trí a, b (a ≤ b). Lấy ra phần chuỗi từ ký tự thứ a
đến ký tự thứ b. Ví dụ Scratch, a = 2, b = 4 → cra.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 15: Đếm nguyên âm và phụ âm ⭐⭐
Phần tiêu đề “Bài 15: Đếm nguyên âm và phụ âm ⭐⭐”Nhập một câu tiếng Việt không dấu, đếm số nguyên âm (a, e, i, o, u, y) và số phụ âm (các chữ cái còn lại). Dấu cách, chữ số, dấu câu không tính.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 16: Viết tắt họ tên ⭐⭐
Phần tiêu đề “Bài 16: Viết tắt họ tên ⭐⭐”Nhập họ tên (các từ cách nhau đúng 1 dấu cách), cho nhân vật nói ra chữ viết tắt gồm chữ
cái đầu của mỗi từ. Ví dụ Nguyen Van An → NVA.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Nhóm 4: Thử thách
Phần tiêu đề “Nhóm 4: Thử thách”Bài 17: Kiểm tra mật khẩu mạnh ⭐⭐⭐
Phần tiêu đề “Bài 17: Kiểm tra mật khẩu mạnh ⭐⭐⭐”Nhập một mật khẩu. Mật khẩu mạnh khi có ít nhất 8 ký tự, có ít nhất 1
chữ số và ít nhất 1 chữ cái. Nói Mật khẩu mạnh hoặc Mật khẩu yếu.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 18: Kiểm tra email đơn giản ⭐⭐⭐
Phần tiêu đề “Bài 18: Kiểm tra email đơn giản ⭐⭐⭐”Nhập một địa chỉ email, kiểm tra theo 2 quy tắc đơn giản: có ký tự @
nhưng không đứng đầu, và có dấu . ở phía sau @. Ví dụ [email protected]
hợp lệ; an.gmail.com, @gmail.com, an@gmail không hợp lệ.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 19: Kiểm tra đuôi tệp ⭐⭐⭐
Phần tiêu đề “Bài 19: Kiểm tra đuôi tệp ⭐⭐⭐”Nhập tên một tệp và một đuôi, kiểm tra tên tệp có kết thúc bằng đuôi đó
không. Ví dụ tro choi.sb3 có đuôi .sb3, còn anh.png thì không.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 20: Tìm vị trí chuỗi con ⭐⭐⭐
Phần tiêu đề “Bài 20: Tìm vị trí chuỗi con ⭐⭐⭐”Nhập chuỗi lớn và chuỗi con, tìm vị trí đầu tiên chuỗi con xuất hiện
trong chuỗi lớn (không dùng khối <[] chứa ký tự []?>). Ví dụ tìm na trong
banana → vị trí 3. Nếu không có thì báo Không tìm thấy.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 21: Nén chuỗi ⭐⭐⭐
Phần tiêu đề “Bài 21: Nén chuỗi ⭐⭐⭐”Nhập một chuỗi chữ cái, nén các ký tự giống nhau đứng liền nhau thành
“ký tự + số lần”. Ví dụ aaabbc → a3b2c1.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 22: Đảo thứ tự các từ ⭐⭐⭐
Phần tiêu đề “Bài 22: Đảo thứ tự các từ ⭐⭐⭐”Nhập một câu (các từ cách nhau đúng 1 dấu cách), cho nhân vật nói ra câu với các từ theo
thứ tự ngược lại. Ví dụ hom nay troi dep → dep troi nay hom.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 23: Từ dài nhất trong câu ⭐⭐⭐
Phần tiêu đề “Bài 23: Từ dài nhất trong câu ⭐⭐⭐”Nhập một câu (các từ cách nhau đúng 1 dấu cách), tìm từ dài nhất. Nếu có nhiều từ dài bằng nhau thì lấy từ xuất hiện đầu tiên.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Nhóm 5: Chuỗi và danh sách
Phần tiêu đề “Nhóm 5: Chuỗi và danh sách”Tách chuỗi thành danh sách rồi dùng lại các kỹ thuật của chuyên đề danh sách.
Bài 24: Tách câu thành danh sách từ ⭐⭐⭐
Phần tiêu đề “Bài 24: Tách câu thành danh sách từ ⭐⭐⭐”Nhập một câu (các từ cách nhau đúng 1 dấu cách), tách từng từ đưa vào danh
sách (các từ :: list), rồi hiện danh sách lên sân khấu.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 25: Đếm số lần một từ xuất hiện ⭐⭐⭐
Phần tiêu đề “Bài 25: Đếm số lần một từ xuất hiện ⭐⭐⭐”Nhập một câu và một từ, đếm xem từ đó xuất hiện bao nhiêu lần trong câu.
Ví dụ câu con meo con cho con ga, từ con → 3 lần.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Bài 26: Thống kê chữ cái ⭐⭐⭐
Phần tiêu đề “Bài 26: Thống kê chữ cái ⭐⭐⭐”Nhập một câu, đếm số lần xuất hiện của từng chữ cái a-z. Hiện 2 danh sách
song song: (chữ cái :: list) (a, b, c…) và (số lần :: list) tương ứng.
Xem lời giải
Vui lòng liên hệ tác giả (thông tin ở cuối trang) để mua bộ bài giải và code. Xin cảm ơn.
Mở rộng thêm
Phần tiêu đề “Mở rộng thêm”- Gói đoạn “lấy chuỗi con” (Bài 14) thành một khối tự tạo nhận 3 tham số (chuỗi, a, b), rồi dùng lại ở Bài 19 và Bài 20 cho gọn.
- Sửa Bài 24 để câu có nhiều dấu cách liền nhau vẫn tách đúng (gợi ý:
chỉ thêm
(từ)vào danh sách khi độ dài của nó lớn hơn 0). - Làm tiếp các bài xử lý chuỗi khó hơn trong Bài tập tổng hợp - Nhóm 3, ví dụ: đảo ngược chuỗi, chuỗi đối xứng, mã hoá Caesar, kiểm tra đảo chữ (anagram).
Liên hệ tác giả
Phần tiêu đề “Liên hệ tác giả”Thầy cô và các em muốn mua bộ bài giải và code của các bài tập trong chuyên đề này vui lòng liên hệ tác giả qua Zalo 0972465159 hoặc Facebook. Xin cảm ơn.