Bài tập

Tận hưởng sức mạnh của chuỗi trong ngôn ngữ lập trình C/C++

Huy Erick

Những bạn mới bắt đầu học lập trình chắc hẳn đã nghe qua về chuỗi trong ngôn ngữ lập trình C/C++. Với C/C++, chúng ta có hai cách để biểu diễn chuỗi: theo phong cách...

Những bạn mới bắt đầu học lập trình chắc hẳn đã nghe qua về chuỗi trong ngôn ngữ lập trình C/C++. Với C/C++, chúng ta có hai cách để biểu diễn chuỗi: theo phong cách của ngôn ngữ C hoặc sử dụng lớp chuỗi (String) được giới thiệu trong chuẩn C/C++.

Chuỗi theo phong cách C

Chuỗi theo phong cách C là kiểu chuỗi xuất phát từ ngôn ngữ C và tiếp tục được hỗ trợ trong C/C++. Chuỗi trong ngôn ngữ lập trình C thực chất là một mảng một chiều của các ký tự kết thúc bởi một ký tự null '\0'.

Để khai báo và khởi tạo chuỗi, bạn có thể làm như sau:

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

Hoặc thậm chí đơn giản hơn:

char loiChao[] = "Hello";

Dưới đây là biểu diễn ô nhớ cho đoạn chuỗi "Hello" 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 hằng số. Bộ biên dịch C tự động thêm '\0' tại vị trí cuối cùng của chuỗi khi nó khởi tạo chuỗi. Hãy xem ví dụ sau:

#include <iostream>
using namespace std;

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

   cout << "Khi gặp nhau, chúng ta nói: ";
   cout << loiChao << endl;

   return 0;
}

Khi bạn biên dịch và chạy đoạn code trên, kết quả in ra sẽ là:

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

Ngôn ngữ C/C++ cung cấp nhiều hàm tiện ích để thao tác với chuỗi kết thúc là '\0'. 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 là như 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ụ cho việc sử dụng một vài hàm trên:

#include <iostream>
#include <cstring>
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: chuỗi1 và chuỗi2
   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;
}

Khi bạn chạy đoạn code trên, kết quả sẽ là:

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++

Thư viện chuẩn C/C++ cung cấp một lớp String mà hỗ trợ tất cả các hoạt động liên quan tới chuỗi đã được đề cập ở trên, và bổ sung thêm nhiều tính năng hữu ích. Dưới đây là một ví dụ nhỏ để bạn được hình dung về lớp String:

#include <iostream>
#include <string>
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: chuỗi1 và chuỗi2
   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;
}

Khi bạn chạy đoạn code trên, kết quả sẽ là:

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

Hy vọng rằng với những kiến thức cơ bản về chuỗi trong ngôn ngữ lập trình C/C++ này, bạn có thể tận hưởng sức mạnh của chuỗi và sử dụng chúng một cách linh hoạt và hiệu quả.

1