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 s1 và s2 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ả.