Tìm mẫu
Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 77 trên 78.
Thử thách
DễTạo một hàm (function) có tên count_pattern, nhận hai đối số: text và pattern. Hàm sẽ trả về số lần pattern xuất hiện trong văn bản, bao gồm cả những lần xuất hiện chồng lấp.
Bạn sẽ nhận được hai dòng đầu vào:
- Chuỗi văn bản cần tìm kiếm
- Chuỗi pattern cần tìm
Gọi hàm của bạn với các đầu vào được cung cấp và in ra kết quả.
Gợi ý:
- Dùng
nchar()để lấy độ dài của chuỗi - Dùng
substr(text, start, stop)để trích xuất chuỗi con - Duyệt qua từng vị trí bắt đầu hợp lệ và kiểm tra xem chuỗi con có khớp với pattern không
Ví dụ, nếu đầu vào là:
ababa
abaĐầu ra sẽ là:
2Giải thích: Pattern "aba" xuất hiện ở vị trí 1 (ababa) và vị trí 3 (ababa), nên số lần xuất hiện là 2.
Nếu đầu vào là:
mississippi
issiĐầu ra sẽ là:
2Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
text <- suppressWarnings(readLines(con, n = 1))
pattern <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Tạo hàm (function) tên là count_pattern, nhận text và pattern
# và trả về số lần pattern xuất hiện chồng lấn trong text
# Gọi hàm và in ra kết quả
print(count_pattern(text, pattern))Tất cả bài học trong Kiến thức nền tảng
4Toán tử phần 2
Toán tử logic (AND, OR)Toán tử logic phần 2 (NOT)Ôn tập: logic đơn giảnLogic vector hóa phần 1Logic vector hóa phần 22Biến và kiểu dữ liệu
Kiểu dữ liệu sốKiểu dữ liệu số nguyênKiểu dữ liệu ký tựKiểu dữ liệu logicKiểm tra kiểu dữ liệuQuy tắc đặt tênGiá trị thiếu: NATóm tắt: tạo biến8Vòng lặp
Vòng lặp forVòng lặp whileBreakNext (continue)Ôn tập: giai thừaTạo dãy (seq, :)Vòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcPhép chia lấy phần nguyên và phép moduloToán tử gánÔn tập: phép tính đơn giảnToán tử so sánh6Nhập xuất cơ bản
In đầu raDùng cat để in đầu raĐầu ra với biếnĐọc đầu vào bằng readline()Cơ bản về chuyển đổi kiểuÔn tập: máy tính tuổiÔn tập: đúng hay sai9Hàm
Khai báo hàmĐối số hàmGiá trị trả vềÔn tập: hàm SigmaÔn tập: hàm xác thựcGiá trị tham số mặc địnhTự luyện tập: Trình biên dịch R online