Bài 17: Mở rộng về kiểu char

Tủ sách mở Wikibooks

Kiểu char đã được giới thiệu trong Bài 3 - Kiểu dữ liệu. Tuy nhiên, kiểu dữ liệu này cần được giải thích rõ ràng hơn nữa trước khi học làm việc với kiểu string trong C++.

Mô tả

Trong C++, char là kiểu dữ liệu kí tự, lưu trữ một kí tự nằm trong bảng mã ASCII (tất cả gồm 256 kí tự). Tuy nhiên về bản chất, các kí tự đó được lưu trữ trong bộ nhớ dưới dạng số nguyên chính là mã của nó trong bảng mã. Do vậy, trong một số trường hợp, kiểu char có thể xuất hiện dưới dạng số nguyên.

Đặc điểm của kiểu dữ liệu char:

  • Giá trị đặt trong cặp nháy đơn. Ví dụ: 'a', '0' hoặc '&'.
  • Chỉ lưu trữ duy nhất một kí tự. Ví dụ: chỉ có 'a' chứ không có 'ab'.

Bảng mã ASCII

Bảng mã ASCII là bảng mã quy định các mã của từng kí tự, bao gồm 256 kí tự. Chúng ta cần một chút hiểu biết về bảng mã 256 kí tự này để có thể làm các bài toán lập trình, tuy nhiên chúng ta không cần thuộc nó. Tất cả những gì chúng ta nên biết là: các kí tự trong bảng chữ cái được sắp xếp liền nhau trên bảng mã. Ví dụ:

  • Mã của kí tự 'b' sẽ hơn mã của kí tự 'a' 1 đơn vị
  • Mã của kí tự '3' sẽ kém mã của kí tự '7' là 4 đơn vị
  • Mã của kí tự 'Z' sẽ lớn hơn mã của kí tự 'A' là 25 đơn vị
  • Khoảng cách giữa 'a' và 'A' bằng khoảng cách giữa 'd' và 'D'

Phép toán

Các phép toán kiểu char giống như kiểu nguyên, được thực hiện trên mã của kí tự đó với nhau.

Ví dụ:

  • '1' + '1' = 'b' ('1' có mã là 49, 'b' có mã là 98)
  • 'z' - '7' = 'C' ('z' là 122, '7' là 55, 'C' là 67)
  • 'A' + 2 = 'C' ('A' có mã là 65, 'C' là 67)

Một số mẹo

Để in ra màn hình mã của một kí tự, ta có thể trừ kí tự đó cho số nguyên 0

cout << 'Z' - 0;

Trong phép trừ, do được sắp xếp liền nhau theo thứ tự, hiệu của hai kí tự số được bảo toàn.

cout << 9 - 7;      // Kết quả là 2
cout << '9' - '7';  // Kết quả cũng là 2

Chúng ta có thể sử dụng phép trừ để biết thứ tự của chữ trong bảng chữ cái tiếng Anh, bằng cách trừ đi kí tự đầu tiên trong bảng chữ cái.

cout << 'a' - 'a' + 1;  // Kết quả là 1: 'a' nằm ở vị trí đầu tiên
cout << 'q' - 'a' + 1;  // Kết quả là 17: 'q' nằm ở vị trí thứ 17
cout << 'Z' - 'A' + 1;  // Kết quả là 26: 'Z' nằm ở vị trí thứ 26






BÀI TẬP