[Buổi 22][Củng cố bộ nhớ & chuỗi][HW] Bài 1: Batch tên động có thống kê
Batch tên động có thống kê
Bối cảnh
Một batch tên có số lượng n chỉ biết khi runtime. Chương trình phải cấp phát string* names = new string[n], đọc n dòng bằng getline, chuẩn hóa khoảng trắng và Title Case từng tên. Dòng sau normalize rỗng được xem là invalid nhưng vẫn nằm trong mảng để giữ correspondence với input.
Sau xử lý, hệ thống cần in từng tên hợp lệ theo thứ tự ban đầu, rồi thống kê VALID x INVALID y LONGEST index length, trong đó LONGEST chọn tên hợp lệ có độ dài lớn nhất; tie chọn index nhỏ hơn. Nếu không có tên hợp lệ, index=-1 length=0. Bài Medium kết hợp input line, string normalization và lifetime raw array: vùng nhớ phải tồn tại đến sau khi thống kê/in, rồi mới delete[].
Dòng rỗng sau normalize vẫn cần được giữ tại đúng index vì chỉ số LONGEST và correspondence với input phụ thuộc vị trí gốc. Vì vậy không nên compact ngay ở bài này. Hãy phân biệt "storage size n" với "số tên valid" và chỉ dùng bộ đếm valid/invalid để thống kê, không thay đổi index của các tên hợp lệ.
Yêu cầu
- Đọc n dòng vào dynamic string array.
- Normalize spaces + Title Case.
- In các tên hợp lệ theo thứ tự.
- Thống kê valid/invalid và longest.
- Cleanup đúng.
Input
Dòng 1 n; tiếp theo n dòng.
Output
Các tên hợp lệ, rồi dòng thống kê.
Ràng buộc
0≤n≤2000, mỗi dòng ≤500 ký tự.
Ví dụ 1
Input
4
nGUYEN van an
Le THI B
Tran c
Output
Nguyen Van An
Le Thi B
Tran C
VALID 3 INVALID 1 LONGEST 0 13
Giải thích
Bốn dòng sau normalize là Nguyen Van An, Le Thi B, rỗng, Tran C. Ba tên hợp lệ được in; valid=3, invalid=1. Độ dài lớn nhất thuộc Nguyen Van An ở index0, nên dòng cuối có LONGEST 0 13.
Ví dụ 2
Input
0
Output
VALID 0 INVALID 0 LONGEST -1 0
Giải thích
n=0 nên không cấp phát phần tử và không đọc dòng tên. Không có output tên; valid/invalid đều 0, không có longest nên index=-1 length=0. Kết quả chỉ là VALID 0 INVALID 0 LONGEST -1 0.
Thông tin học tập
- Module: M06
- Buổi: B22
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: dynamic string array, getline, normalization, longest line, empty count, lifetime
- Giới hạn kiến thức: B01-B22
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments