Giới Thiệu Về Kiểu Dữ Liệu Char Trong C++ ” Cafedev.vn

Xem 594

Cập nhật thông tin chi tiết về Giới Thiệu Về Kiểu Dữ Liệu Char Trong C++ ” Cafedev.vn mới nhất ngày 06/03/2021 trên website Ceblaza.net. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 594 lượt xem.

--- Bài mới hơn ---

  • Kiểu Ký Tự Trong C++ Là Gì? (Phần 1) - Xem 297
  • Hiểu Rõ C++ Là Gì? Để Luôn Đi Trước Những Đường Cong Công Nghệ - Xem 99
  • Top Ngôn Ngữ Lập Trình Nên Học (2018) - Xem 297
  • Học C++ Làm Được Gì Cho Đời? - Xem 1,188
  • Nhập Xuất Cơ Bản Trong C Và C++ - Xem 198
  • Đến thời điểm này, các kiểu dữ liệu cơ bản mà chúng ta đã tìm hiểu để sử dụng cho việc giữ các số (số nguyên và dấu phẩy động) hoặc giá trị đúng / sai (booleans). Nhưng nếu chúng ta muốn lưu trữ chữ thì sao? Kiểu dữ liệu char được thiết kế cho mục đích như vậy.

    Kiểu dữ liệu char là một kiểu tích phân, có nghĩa là giá trị cơ bản được lưu trữ dưới dạng một số nguyên và nó được đảm bảo có kích thước 1 byte. Tuy nhiên, tương tự như cách giá trị boolean được hiểu là true hay false, giá trị char được hiểu là ký tự ASCII.

    ASCII là viết tắt của Code tiêu chuẩn của Mỹ để trao đổi thông tin và nó định nghĩa một cách cụ thể để biểu thị các ký tự tiếng Anh (cộng với một vài ký hiệu khác) là các số từ 0 đến 127 (được gọi là code ASCII). Ví dụ, code ASCII 97 được hiểu là ký tự ‘a.

    Ký tự char luôn được đặt giữa các dấu nhấy đơn.

    Ở đây, một bảng đầy đủ các ký tự ASCII:

    Code 0-31 được gọi là ký tự không thể in được và chúng chủ yếu được sử dụng để thực hiện định dạng và điều khiển máy in. Hầu hết trong số này đã lỗi thời.

    Code 32-127 được gọi là các ký tự có thể in được và chúng đại diện cho các chữ cái, ký tự số và dấu chấm câu mà hầu hết các máy tính sử dụng để hiển thị văn bản tiếng Anh cơ bản.

    Bạn có thể khởi tạo các biến char bằng cách sử dụng các ký tự:

    char ch2{ 'a' }; // initialize with code point for 'a' (stored as integer 97) (pferred)

    Bạn cũng có thể khởi tạo ký tự bằng số nguyên, nhưng điều này nên tránh nếu có thể

    char ch1{ 97 }; // initialize with integer 97 ('a') (not pferred)

    Cẩn thận không trộn lẫn số ký tự với số nguyên. Hai khởi tạo sau không giống nhau:

    char ch{5}; // initialize with integer 5 (stored as integer 5) char ch{'5'}; // initialize with code point for '5' (stored as integer 53)

    Số dưới dạng ký tự sẽ được sử dụng khi chúng ta muốn biểu diễn số dưới dạng văn bản, thay vì số để áp dụng các phép toán.

    in ký tự

    Khi sử dụng std :: cout để in char, std :: cout xuất ra biến char dưới dạng ký tự ASCII:

    Điều này tạo ra kết quả:

    Chúng ta cũng có thể xuất chữ char trực tiếp:

    Điều này tạo ra kết quả:

    Số nguyên chiều rộng cố định int8_t thường được xử lý giống như một char trong C ++, do đó, nó thường sẽ in dưới dạng char thay vì số nguyên.

    2. In ký tự dưới dạng số nguyên thông qua static_cast

    Nếu chúng ta muốn xuất một char dưới dạng một số thay vì một ký tự, chúng ta phải nói với std :: cout để in char như thể nó là một số nguyên. Một cách để làm điều này là gán char cho một số nguyên và in số nguyên:

    Tuy nhiên, điều này là khó khăn. Một cách tốt hơn là sử dụng một kiểu cast. Một cast sẽ tạo ra một giá trị cho một kiểu nào đó từ một giá trị của kiểu khác. Để chuyển đổi giữa các kiểu dữ liệu cơ bản (ví dụ: từ char thành int hoặc ngược lại), chúng ta sử dụng static_cast.

    Cú pháp cho cast như sau:

    static_cast lấy giá trị từ một biểu thức làm đầu vào và chuyển đổi nó thành bất kỳ loại cơ bản nào new_type đại diện (ví dụ: int, bool, char, double).

    Ở đây, sử dụng static_cast để tạo giá trị nguyên từ giá trị char của chúng ta:

    Kết quả này trong:

    Điều quan trọng cần lưu ý là tham số tới static_cast đánh giá là một biểu thức. Khi chúng ta truyền vào một biến, biến đó được ước tính để tạo ra giá trị của nó, sau đó được chuyển đổi sang kiểu mới. Biến không bị ảnh hưởng bằng cách chuyển giá trị của nó sang kiểu mới. Trong trường hợp trên, biến ch vẫn là char và vẫn giữ nguyên giá trị.

    Cũng lưu ý rằng việc static_cast không thực hiện bất kỳ kiểm tra phạm vi(độ lớn), vì vậy nếu bạn truyền một số nguyên lớn vào một char, bạn sẽ tràn kiểu char của mình.

    Chúng ta sẽ nói nhiều hơn về các static_cast và các kiểu khác nhau trong một bài học trong tương lai.

    Chương trình sau đây yêu cầu người dùng nhập một ký tự, sau đó in ra cả ký tự và code ASCII của nó:

    Đây là đầu ra từ một lần chạy:

    Input a keyboard character: q q has ASCII code 113

    Lưu ý rằng std :: cin sẽ cho phép bạn nhập nhiều ký tự. Tuy nhiên, biến ch chỉ có thể chứa 1 ký tự. Do đó, chỉ có ký tự đầu vào đầu tiên được trích xuất thành biến ch. Phần còn lại của đầu vào người dùng được để lại trong bộ đệm đầu vào mà std :: cin sử dụng và có thể được trích xuất bằng các lệnh gọi tiếp theo đến std :: cin.

    Bạn có thể thấy hành vi này trong ví dụ sau:

    Input a keyboard character: abcd a has ASCII code 97 b has ASCII code 98

    4. Kích thước Char, phạm vi và dấu hiệu mặc định

    Char được định nghĩa bởi C ++ để luôn có kích thước 1 byte. Theo mặc định, một char có thể được có dấu hoặc không dấu (mặc dù nó thường được có dấu). Nếu bạn sử dụng ký tự để giữ các ký tự ASCII, bạn không cần chỉ định một ký hiệu (vì cả hai ký tự có ký hiệu và không dấu có thể giữ các giá trị trong khoảng từ 0 đến 127).

    Nếu bạn sử dụng char để giữ các số nguyên nhỏ (điều bạn không nên làm trừ khi bạn tối ưu hóa rõ ràng cho không gian), bạn phải luôn chỉ định xem nó có dấu hay không dấu. Một char có dấunhân vật có thể giữ một số trong khoảng từ -128 đến 127. Một char không dấu có thể giữ một số trong khoảng từ 0 đến 255.

    5. Trình tự thoát khỏi một dòng nào đó

    Có một số ký tự trong C ++ có ý nghĩa đặc biệt. Những ký tự này được gọi là trình tự thoát. Một chuỗi thoát bắt đầu bằng một ký tự ‘ (dấu gạch chéo ngược) và sau đó là một chữ cái hoặc số sau đây.

    Bạn đã thấy trình tự thoát phổ biến nhất: ‘ n, có thể được sử dụng để nhúng một dòng mới trong một chuỗi văn bản:

    Kết quả này:

    First line Second line

    Một chuỗi thoát thường được sử dụng khác là ‘ t, trong đó nhúng một tab ngang:

    Đầu ra nào:

    First part Second part

    Ba chuỗi thoát đáng chú ý khác là:

    In in một trích dẫn

    ‘. In một trích dẫn kép

    \ In dấu gạch chéo ngược

    Ở đây, một bảng của tất cả các chuỗi để giúp chúng ta thoát trong 1 line:

    Bản in

    "This is quoted text" This string contains a single backslash 6F in hex is char 'o'

    Chúng ta đã tìm hiểu tại bài Giới thiệu về iostream: cout, cin và endl.

    7. Điều khác biệt giữa việc đặt ký hiệu trong dấu ngoặc đơn hay dấu ngoặc kép

    Các ký tự độc lập luôn được đặt trong các trích dẫn đơn (ví dụ: ‘a’,’+’, ‘5’). Một char chỉ có thể đại diện cho một ký hiệu (ví dụ: chữ a, ký hiệu cộng, số 5). Ví dụ sau đây là sai:

    char ch('56'); // a char can only hold one symbol

    Văn bản đặt giữa hai dấu ngoặc kép (ví dụ: “Hello, world!”) được gọi là một chuỗi. Chuỗi là một tập hợp các ký tự liên tiếp (và do đó, một chuỗi có thể chứa nhiều ký hiệu).

    Hiện tại, bạn có thể sử dụng chuỗi ký tự trong code của mình:

    std::cout << "Hello, world!"; // "Hello, world!" is a string literal

    Luôn đặt các ký tự độc lập trong các dấu ngoặc đơn. Điều này giúp trình biên dịch tối ưu hóa hiệu quả hơn.

    8. Còn các loại char khác, wchar_t, char16_t và char32_t thì sao?

    Nên tránh sử dụng wchar_t trong hầu hết các trường hợp (trừ khi giao tiếp với API Windows). Kích thước của nó được xác định, và không đáng tin cậy. Nó phần lớn đã bị phản đối khi dùng.

    Giống như ASCII ánh xạ các số nguyên 0-127 sang các ký tự tiếng US, các tiêu chuẩn code hóa ký tự khác tồn tại để ánh xạ các số nguyên (có kích thước khác nhau) sang các ký tự trong các ngôn ngữ khác. Ánh xạ nổi tiếng nhất bên ngoài ASCII là tiêu chuẩn Unicode, ánh xạ hơn 110.000 số nguyên sang các ký tự trong nhiều ngôn ngữ khác nhau. Vì Unicode chứa rất nhiều điểm code, một điểm code Unicode duy nhất cần 32 bit để thể hiện một ký tự (được gọi là UTF-32). Tuy nhiên, các ký tự Unicode cũng có thể được mã hóa bằng nhiều ký tự 16 bit hoặc 8 bit (được gọi là UTF-16 và UTF-8 tương ứng).

    char16_t và char32_t đã được thêm vào C ++ 11 để cung cấp hỗ trợ rõ ràng cho các ký tự Unicode 16 bit và 32 bit. char8_t đã được thêm vào trong C ++ 20.

    Trong khi đó, bạn chỉ nên sử dụng các ký tự ASCII khi làm việc với các ký tự (và chuỗi). Sử dụng các ký tự từ các bộ ký tự khác có thể khiến các ký tự của bạn hiển thị không chính xác.

    --- Bài cũ hơn ---

  • Cài Đặt Thư Viện Boost, Opencv Và Ms Visual Studio C++ Trên X64 Windows - Xem 693
  • Viết Một Module Python Bằng C++ Và Thư Viện Boost - Xem 693
  • Input Và Output Trong C++ - Xem 2,673
  • Nhập, Xuất Và Định Dạng Dữ Liệu Trong C++ (Input And Output) - Xem 198
  • Trong Lập Trình C, Sự Khác Biệt Giữa Bool Và _Bool Là Gì? - Xem 1,683
  • Bạn đang xem bài viết Giới Thiệu Về Kiểu Dữ Liệu Char Trong C++ ” Cafedev.vn trên website Ceblaza.net. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!

    Share FB »