📘 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 = '+';
  • 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).

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ị.

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 n bước trên vòng tròn độ dài n sẽ quay về vị trí cũ. Do đó, nếu đi k bướ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.
  • Ứng dụng vào bảng chữ cái (26 chữ cái):
    1. Chuyển ký tự về dạng số từ 0 đến 25 (bằng cách lấy c - 'a').
    2. Thực hiện phép toán cộng/trừ số bước.
    3. Dùng phép % 26 để giữ kết quả luôn nằm trong vòng tròn.
    4. Cộng lại 'a' để đưa về ký tự ban đầu.

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

Mới nhất
Tải bình luận...

Không có bình luận nào.