Bài tập

Chuỗi (String) trong C/C++: Tất cả những gì bạn cần biết

Huy Erick

C++ là một ngôn ngữ lập trình mạnh mẽ và đa năng, và một phần quan trọng của nó là việc làm việc với các chuỗi. Trong bài viết này, chúng ta sẽ khám phá...

C++ là một ngôn ngữ lập trình mạnh mẽ và đa năng, và một phần quan trọng của nó là việc làm việc với các chuỗi. Trong bài viết này, chúng ta sẽ khám phá hai cách để biểu diễn chuỗi trong C/C++ và học cách sử dụng chúng.

Chuỗi theo phong cách C

Đầu tiên, chúng ta sẽ tìm hiểu về chuỗi theo phong cách C. Loại chuỗi này xuất phát từ ngôn ngữ C và vẫn được hỗ trợ trong C/C++. Trong ngôn ngữ lập trình C, chuỗi thực chất là một mảng một chiều các ký tự kết thúc bằng ký tự null '\0'.

Dưới đây là một ví dụ về khai báo và khởi tạo một chuỗi "Hello" trong ngôn ngữ C/C++:

char loiChao[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Tuy nhiên, chúng ta có thể viết ngắn gọn hơn bằng cách sử dụng cú pháp sau:

char loiChao[] = "Hello";

Dưới đây là một biểu diễn ô nhớ cho chuỗi trên trong ngôn ngữ C/C++:

Thực tế, bạn không cần phải đặt ký tự null tại vị trí cuối cùng của biến chuỗi. Bộ biên dịch C sẽ tự động thêm ký tự null vào cuối chuỗi khi khởi tạo. Hãy xem ví dụ sau để hiểu rõ hơn:

#include  using namespace std;  int main() {     char loiChao[6] = {'H', 'e', 'l', 'l', 'o', '\0'};     cout  "Khi gặp nhau, chúng ta nói: "  loiChao  endl;     return 0; }

Khi chạy đoạn code trên, bạn sẽ nhận được kết quả sau:

Khi gặp nhau, chúng ta nói: Hello

Ngôn ngữ C/C++ cung cấp nhiều hàm đa dạng để thao tác với các chuỗi kết thúc bằng ký tự null. Dưới đây là một số hàm phổ biến:

STT Hàm Mục đích
1 strcpy(s1, s2) Sao chép chuỗi s2 cho chuỗi s1.
2 strcat(s1, s2) Nối chuỗi s2 vào cuối chuỗi s1.
3 strlen(s1) Trả về độ dài của chuỗi s1.
4 strcmp(s1, s2) Trả về 0 nếu s1s2 giống nhau, nhỏ hơn 0 nếu s1 s2, lớn hơn 0 nếu s1 > s2.
5 strchr(s1, ch) Trả về con trỏ tới vị trí đầu tiên của ký tự ch trong chuỗi s1.
6 strstr(s1, s2) Trả về con trỏ tới vị trí đầu tiên của chuỗi s2 trong chuỗi s1.

Dưới đây là ví dụ về việc sử dụng một số hàm trên:

#include  #include  using namespace std;  int main() {     char chuoi1[10] = "Hello";     char chuoi2[10] = "Christmas";     char chuoi3[10];     int len;      // Sao chép chuỗi1 vào trong chuỗi3     strcpy(chuoi3, chuoi1);     cout  "strcpy(chuoi3, chuoi1): "  chuoi3  endl;      // Nối hai chuỗi: chuoi1 và chuoi2     strcat(chuoi1, chuoi2);     cout  "strcat(chuoi1, chuoi2): "  chuoi1  endl;      // Tổng độ dài của chuỗi1 sau khi nối chuỗi     len = strlen(chuoi1);     cout  "Dùng hàm strlen(chuoi1) để tính độ dài chuỗi1: "  len  endl;      return 0; }

Chạy đoạn chương trình trên sẽ cho kết quả như sau:

strcpy(chuoi3, chuoi1): Hello strcat(chuoi1, chuoi2): HelloChristmas Dùng hàm strlen(chuoi1) để tính độ dài chuỗi1: 16

Lớp String trong C/C++

Ngoài chuỗi theo phong cách C, Thư viện chuẩn C/C++ cung cấp một kiểu lớp string giúp thao tác với chuỗi một cách tiện lợi hơn. Lớp string hỗ trợ tất cả các hoạt động liên quan đến chuỗi mà chúng ta đã thảo luận ở trên, và cung cấp thêm nhiều tính năng khác nữa.

Dưới đây là một ví dụ về việc sử dụng lớp string:

#include  #include  using namespace std;  int main() {     string chuoi1 = "Hello";     string chuoi2 = "Christmas";     string chuoi3;     int len;      // Sao chép chuỗi1 vào trong chuỗi3     chuoi3 = chuoi1;     cout  "Bây giờ chuỗi3 là: "  chuoi3  endl;      // Nối hai chuỗi: chuoi1 và chuoi2     chuoi3 = chuoi1 + chuoi2;     cout  "chuoi1 + chuoi2 có kết quả là: "  chuoi3  endl;      // Tổng độ dài của chuỗi3 sau khi nối chuỗi     len = chuoi3.size();     cout  "Tính độ dài với hàm chuoi3.size(): "  len  endl;      return 0; }

Chạy đoạn chương trình trên sẽ cho kết quả như sau:

Bây giờ chuỗi3 là: Hello chuoi1 + chuoi2 có kết quả là: HelloChristmas Tính độ dài với hàm chuoi3.size(): 16

Như bạn thấy, việc sử dụng lớp string giúp chúng ta làm việc với chuỗi dễ dàng hơn và giúp tiết kiệm thời gian viết mã.

Trong bài viết này, chúng ta đã tìm hiểu về hai cách biểu diễn chuỗi trong C/C++: chuỗi theo phong cách C và lớp string. Bạn hãy chắc chắn hiểu rõ cách sử dụng chúng và áp dụng vào các dự án của mình.

1