📘 CHUYÊN ĐỀ 2: KIỂU DỮ LIỆU KÝ TỰ (CHAR) & ASCII
1. Khái niệm cơ bản về char
- Định nghĩa: Kiểu
char(character) dùng để lưu trữ một ký tự duy nhất (chữ cái, chữ số, ký hiệu, khoảng trắng). - Khai báo trực tiếp: Ký tự phải được đặt trong dấu ngoặc đơn
' '.- Ví dụ:
char c = 'a';,char op = '+';
- Ví dụ:
- Kích thước: Chiếm 1 byte (8 bit) trong bộ nhớ.
2. Bảng mã ASCII - Linh hồn của kiểu Char
Trong máy tính, mọi ký tự không được lưu trữ dưới dạng hình vẽ mà được đại diện bởi một giá trị số nguyên.
- ASCII (American Standard Code for Information Interchange): Là bảng mã quy chuẩn gán mỗi ký tự với một con số từ 0 đến 255.
- Ví dụ điển hình:
- Ký tự
'A'có mã là 65. - Ký tự
'a'có mã là 97. - Ký tự
'0'(số 0 dưới dạng chữ) có mã là 48. - Lưu ý: Mỗi ký tự đều có một số định danh duy nhất (Ví dụ dấu
+trong mã ASCII là 43).
- Ký tự
3. Ép kiểu (Casting) giữa Char và Int
Bạn có thể dễ dàng chuyển đổi qua lại giữa "hình dáng" (ký tự) và "giá trị" (số) của nó:
- Lấy mã ASCII của ký tự: Ép về kiểu
int.
C++char c = '+'; cout << (int)c; // Kết quả: 43 - Lấy ký tự từ mã số: Ép về kiểu
char.
C++int n = 65; cout << (char)n; // Kết quả: 'A'
4. Quy tắc Chữ hoa - Chữ thường
Một đặc điểm cực kỳ quan trọng trong lập trình thi đấu:
- Khoảng cách: Ký tự hoa luôn có giá trị số nhỏ hơn ký tự thường tương ứng đúng 32 đơn vị.
'a' - 'A' = 32
- Sự đồng điệu: Khoảng cách giữa các chữ cái trong bảng mã ASCII giống hệt khoảng cách trong bảng chữ cái Alphabet.
- Nếu
'a'cách'b'1 đơn vị thì'A'cũng cách'B'1 đơn vị.
- Nếu
Công thức biến đổi:
- Hoa → Thường:
char(c + 32)hoặc chuyên nghiệp hơn:char(c - 'A' + 'a') - Thường → Hoa:
char(c - 32)hoặc chuyên nghiệp hơn:char(c - 'a' + 'A')
5. Tư duy "Vòng tròn độ dài N" (Modulo Arithmetic)
Khi xử lý các bài toán dạng "ký tự đứng sau 'z' là 'a'", chúng ta sử dụng tư duy vòng tròn.
- Lý thuyết: Đi
nbước trên vòng tròn độ dàinsẽ quay về vị trí cũ. Do đó, nếu đikbước, vị trí thực tế sẽ làk % n.- Ví dụ: Vòng tròn có 5 vị trí (0, 1, 2, 3, 4). Nếu bạn đi 13 bước:
13 % 5 = 3. Bạn thực tế chỉ dịch chuyển 3 bước từ điểm xuất phát.
- Ví dụ: Vòng tròn có 5 vị trí (0, 1, 2, 3, 4). Nếu bạn đi 13 bước:
- Ứng dụng vào bảng chữ cái (26 chữ cái):
- Chuyển ký tự về dạng số từ
0đến25(bằng cách lấyc - 'a'). - Thực hiện phép toán cộng/trừ số bước.
- Dùng phép
% 26để giữ kết quả luôn nằm trong vòng tròn. - Cộng lại
'a'để đưa về ký tự ban đầu.
- Chuyển ký tự về dạng số từ
Ví dụ: Tìm ký tự đứng sau ký tự c là k đơn vị (theo vòng tròn):
C++
char result = (c - 'a' + k) % 26 + 'a';
Bình luận