Khái Niệm Xâu
Xâu (tiếng anh là String) là một kiểu dữ liệu. Xâu là một dãy các ký tự trong bảng mã ASCII. Hiểu đơn giản, xâu là một chuỗi ký tự bao gồm chữ hoa, chữ thường, số và một số ký tự đặc biệt
Lưu ý: chữ ở đây được hiểu là các chữ cái trong bảng chữ cái tiếng anh.
Ví dụ về xâu (string): abc123, xin_chao, ToiThichHocLapTrinh!
Xâu Trong Scratch
Trong Scratch, có 2 câu lệnh liên quan đến xử lý xâu:
length of … : Câu lênh này sẽ trả về số lượng ký tự có trong xâu.
Ví dụ, khi click vào câu lệnh “length of apple” thì câu lệnh này sẽ trả về số 5 vì chữ apple có 5 ký tự
letter … of … : Câu lệnh này sẽ giúp lấy ra ký tự ở vị trí nào đó của xâu.
Ví dụ, khi click vào câu lệnh “letter 1 of apple” thì câu lệnh này sẽ trả về chữ “a” vì ký tự thứ nhất (chữ cái thứ nhất) trong chuỗi (từ) apple là chữ “a”
Bài 1: Xử Lý Xâu – Đếm Ký Tự Trong Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào một sâu bất kỳ. Sau đó:
- Khi ấn phím 1, nhân vật sẽ nói ra số ký tự có trong xâu đó
- Khi ấn phím 4, nhân vật sẽ nói ra số ký tự là chữ cái có trong xâu
- Khi ấn phím 3, nhân vật sẽ nói ra số ký tự là số có trong xâu
- Khi ấn phím 4, nhân vật sẽ nói ra số ký tự không phải là chữ cũng không phải là số có trong xâu
Gợi Ý Hướng Giải Quyết:
- Dùng câu lệnh “length of … ” để đếm số ký tự trong xâu người dùng nhập vào
- Tạo biến “số chữ cái” để lưu số lượng chữ cái có trong sâu. Tạo list “chữ cái” gồm 26 chữ cái trong bảng chữ cái tiếng anh. Duyệt từng ký tự trong xâu và kiểm tra xem ký tự đó có thuộc list chữ cái hay không. Nếu thuộc thì tăng giá trị của biến chữ cái lên 1 đơn vị
- Tạo biến “số số” để lưu số lượng số có trong sâu. Tạo list “số” gồm 10 chữ số từ 0 đến 9. Duyệt từng ký tự trong xâu và kiểm tra xem ký tự đó có thuộc list “số” hay không. Nếu thuộc thì tăng giá trị của biến c”số số” lên 1 đơn vị
- Tạo biến “số ký tự đặc biệt” để lưu số lượng số ký tự đặc biệt có trong sâu. Duyệt từng ký tự trong xâu và kiểm tra xem ký tự đó có không thuộc cả list “chữ cái” và list “số” hay không. Nếu không thuộc cả hai thì tăng giá trị của biến c”số ký tự đặc biệt” lên 1 đơn vị
Bài Giải:
Bài 2: Xóa Một Loại Ký Tự Nào Đó Trong Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào một sâu bất kỳ. Chương trình sẽ xóa bỏ mọi ký tự không phải là chữ trong xâu đó. Sau đó nhân vật sẽ thông báo xâu kết quả ra màn hình.
Gợi Ý Hướng Giải Quyết:
Scratch không có câu lệnh xóa một ký tự nào đó trong xâu. Do đó ta sẽ phải tạo ra một biến để lưu xâu mới. Tất cả các ký tự trong xâu cũ thỏa mãn điều kiện sẽ được thêm vào xâu mới. Cụ thể:
- Tạo list “chữ cái” gồm 26 chữ cái trong bảng chữ cái tiếng anh.
- Duyệt từng ký tự trong xâu và kiểm tra xem ký tự đó có thuộc list chữ cái hay không. Nếu thuộc thì nối nó vào biến chứa xâu mới
Bài Giải:
Bài 3: Xóa Ký Tự Trùng Trong Xâu
Nhân vật sẽ yêu cầu người dùng nhập một xâu bất kỳ từ bàn phím.
Sau đó, chương trình sẽ kiểm tra nếu thấy có 2 ký tự liền nhau và giống nhau thì xóa đi một ký tự.
Ví dụ nhập vào là aaxbbbccccd thì đưa ra kết quả axbcd
Gợi Ý Hướng Giải Quyết:
Bài tập này có ý tưởng giải quyết tương tự như bài 2 – xóa một loại ký tự nào đó trong xâu. Tuy nhiên, thay vì so sánh từng ký tự với danh sách chữ cái và danh sách số thì ta cần so sanh ký tự đang xét với ký tự phía trước nó để xem có trùng không. Nếu không trùng thì ta thêm ký tự đó vào xâu kết quả.
Cụ thể:
- Tạo xâu “xâu mới” để lưu kết quả. Đặt giá trị của xâu mới là ký tự đầu tiên của xâu người dùng nhập vào.
- Tạo biến số thứ tự để giúp duyệt từng ký tự trong xâu. Ở đây ta có thể đặt stt = 2 vì ta sẽ luôn thêm ký tự thứ nhất của xâu người dùng nhập vào vào xâu kết quả. Ta sẽ cần xét từ ký tự thứ 2 và so sánh ký tự đang xét (ký tự có vị trí stt) với ký tự trước nó (ký tự có vị trí stt – 1)
- Duyệt từng ký tự của xâu người dùng nhập vào (bắt đầu duyệt từ ký tự thứ 2). Nếu thấy ký tự nào không trùng với ký tự trước nó thì nối ký tự đó vào xâu “xâu mới”
Bài Giải:
Bài 4: Xử Lý Xâu – Đảo Ngược Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào một sâu bất kỳ. Sau đó nhân vật sẽ thông báo xâu có thứ tự ngược lại so với sâu người dùng nhập vào.
Ví dụ: người dùng nhập vào xâu “abc123” thì nhân vật sẽ thông báo lại là “321cba”
Gợi Ý Hướng Giải Quyết:
- Tạo một biến lưu xâu đảo ngược
- Duyệt từng phần tử trong xâu nhưng sẽ duyệt từ dưới lên (hay chính là duyệt từ phần tử cuối cùng)
- Khi duyệt đến phần tử nào thì nối phần tử đó vào xâu đảo ngược
Bài Giải:
Bài 5: Trộn 2 Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào hai sâu bất kỳ. Chương trình sẽ trộn hai xâu lại với nhau rồi sau đó nhân vật sẽ nói ra kết quả.
Việc trộn xâu sẽ được thực hiện theo nguyên tắc sau:
- Lần lượt từ trái sang phải, một ký tự của xâu thứ nhất rồi đến một ký tự của xâu thứ hai.
- Nếu xâu nào hết phần tử thì chỉ nói ra các ký tự của phần tử còn lại.
Bài Giải:
Bài 6: Phân Tách Chữ Và Số Trong Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào một xâu bất kỳ chứa cả chữ và số. Chương trình sẽ dồn hết chữ sang bên trái (đúng thứ tự) và chữ số sang bên phải (giữ đúng thứ tự). Sau đó nhân vật sẽ nói ra kết quả.
Ví dụ:
- Xâu người chơi nhập vào là 184a4hgs1
- Xâu nhân vật cần thông báo là ahgs1841
Gợi Ý Hướng Giải Quyết:
Với bài tập này, trước tiên ta phải phân tách các ký tự trong xâu người chơi nhập vào thành 2 loại chữ và số. Các ký tự chữ tách ra sẽ được lưu thành xâu A, các ký tự số tách ra sẽ tạo thành xâu B (theo đúng thứ tự). Cuối cùng ta chỉ cần nối xâu A và xâu B thì ta sẽ được xâu kết quả.
Bài Giải:
Bài 7: Nối Xâu Ở Vị Trí Chỉ Định
Nhân vật yêu cầu người chơi nhập vào hai xâu và lần lượt lưu vào biến A và B. Tiếp theo, nhân vật tiếp tục yêu cầu nhập vào 1 số n nhỏ hơn độ dài của xâu A. Nếu người chơi nhập lớn hơn, yêu cầu nhập lại cho đến khi nào đúng. Sau đó chương trình sẽ chèn xâu B vào xâu A ở vị trí n mà người chơi nhập. Cuối cùng nhân vật sẽ nói ra xâu kết quả.
Ví dụ:
- Người chơi nhập A = abc, B = 124
- Người chơi nhập n = 2
- Xâu kết quả là: a124bc
Gợi Ý Hướng Giải Quyết:
- Tạo các biến A, B và n như đề bài yêu cầu
- Cho nhân vật hỏi và lưu câu trả lơi của người chơi vào các biến như đề bài yêu cầu
- Riêng với biến n thì ta cần cho NV hỏi sau đó kiểm tra lại đáp án xem có thỏa mãn điều kiện (n < length of A) không. Nếu không thì cần repeat việc hỏi cho đến khi thỏa mãn điều kiện
- Duyệt từng phần tử của xâu A từ phần tử thứ 1 cho đến phần tử n-1 và lưu nó thành xâu mới, tạm gọi là xâu A1
- Duyệt từng phần tử của xâu A từ phần tử thứ n cho đến hết và lưu nó vào một xâu mới, tạm gọi là A2
- Ta nối A1, B và A2 thì sẽ được xâu đề bài yêu cầu
Bài Giải
Bài 8: Phân Tách Từ Trong Xâu
Nhân vật sẽ yêu cầu người chơi nhập vào một tên đầy đủ bao gồm họ, tên đệm và tên. Chương trình sẽ giúp phân tách đâu là họ, đâu là tên đệm và đâu là tên. Sau đó nhân vật sẽ thông báo kết quả ra màn hình.
Ví dụ:
- Tên người chơi nhập vào là Lê Hoàng ==> Kết quả nhân vật sẽ nói ra là: Họ là Lê, tên là Hoàng
- Tên người chơi nhập vào là Nguyễn Văn An ==> Kết quả nhân vật sẽ nói ra là: Họ là Nguyễn, tên điệm là Văn, tên là An
- Tên người chơi nhâp vào là Lê Thị Ngọc Anh ==> Kết quả nhân vật sẽ nói ra là: Họ là Lê, tên đệm là Thị Ngọc, tên là Anh
Gợi Ý Hướng Giải Quyết:
- Chúng ta sẽ dùng dấu hiệu là dấu cách để phân tách các từ trong một xâu.
- Cần duyệt từng phần tử trong xâu cho đến khi gặp xấu cách. Như vậy thì toàn bộ các ký tự vừa duyệt qua sẽ thuộc 1 từ. Cứ lặp đi lặp lại như vậy cho đến hết xâu thì ta sẽ tách được hêt các từ trong xâu đó
- Tuy nhiên số lượng từ trong xâu là không thể biết trước. Tên có thể có 2, 3, 4, 5 từ. Do đó ta sẽ dùng list (thay vì biến) để lưu các từ tách ra được vì ta không biết cần phải lập bao nhiêu biến cho đủ
- Cuối cùng, phần tử đầu tiên trong list chính là họ. Phần tử cuối cùng trong list sẽ là tên. Phần tử còn lại ở giữa (nếu có) sẽ là tên đệm