Khi mới học C, chắc các bạn đều rất bối rối khi làm việc với xâu ký tự, việc sử dụng con trỏ lưu xâu ký tự rất phức tạp, dễ gây lỗi khiến nhiều người cho rằng nó không bằng xâu ký tự trong Pascal.
Các chương trình C++ có thể sử dụng chuỗi theo cách thức cũ của Ngôn ngữ C [trong bài viết này gọi là C-String]: mảng các ký tự kết thúc bởi ký tự mã ASCII là 0 [ký tự
char* s_old = "ABC";
string s[s_old];
- cùng với các hàm thư viện khai báo trong
char* s_old = "ABC";
string s[s_old];
6. Có nhiều bất tiện khi dùng theo cách thức này:
- Người lập trình phải chủ động kiểm soát bộ nhớ cấp phát cho chuỗi ký tự. Nói chung là phải am hiểu và rất thông thạo về kỹ thuật dùng bộ nhớ và con trỏ thì chương trình mới tránh được các lỗi về kỹ thuật;
- Không thể gán giá trị hay sử dụng phép toán
char* s_old = "ABC"; string s[s_old];
7 [ghép chuỗi] và các phép toán so sánh như:
char* s_old = "ABC"; string s[s_old];
8 [lớn hơn],
char* s_old = "ABC"; string s[s_old];
9 [nhỏ hơn],… mà phải gọi các hàm thư viện trong
6;char* s_old = "ABC"; string s[s_old];
- Nếu dùng kỹ thuật cấp phát động thì phải quản lý việc cấp thêm bộ nhớ khi chuỗi dãn ra [chẳng hạn do ghép chuỗi] và phải hủy bộ nhớ [khi không dùng nữa] để tránh việc cạn kiệt bộ nhớ của máy tính trong trường hợp có nhiều chương trình hoạt động đồng thời.
1. Kiểu chuỗi string trong thư viện STL của C++
Thư viện chuẩn STL [Standard Template Library] cung cấp kiểu
string[];
string[const char *str]; // char* là kiểu dữ liệu xâu của C
string[const string & str];
1 [xâu ký tự], giúp các bạn tránh khỏi hoàn toàn các phiền phức nêu trên.Các chỉ thị
string[];
string[const char *str]; // char* là kiểu dữ liệu xâu của C
string[const string & str];
2 cần khai báo để sử dụng string:
# include
using std::string;
//using namespace std;
Nếu bạn muốn tận dụng các hàm của C-String, cần chuyển đổi giữa 2 kiểu dữ liệu này:
- Chuyển từ
string[]; string[const char str]; // char là kiểu dữ liệu xâu của C
string[const string & str];
1 sang C-String:
string s; s.c_str[];
- Chuyển từ C-String sang
string[]; string[const char str]; // char là kiểu dữ liệu xâu của C
string[const string & str];
1:
char* s_old = "ABC"; string s[s_old];
2. Các phương thức, phép toán tiện ích của kiểu string
Kiểu
string[];
string[const char *str]; // char* là kiểu dữ liệu xâu của C
string[const string & str];
1 của STL hỗ trợ các nhóm phương thức và phép toán tiện ích sau đây.
a] Các phép toán và phương thức cơ bản
- Các toán tử
char* s_old = "ABC"; string s[s_old];
7,
7 dùng để ghép hai chuỗi và cũng để ghép một ký tự vào chuỗi;string[]; string[const char str]; // char là kiểu dữ liệu xâu của C
string[const string & str];
- Các phép so sánh theo thứ tự từ điển:
string[]; string[const char str]; // char là kiểu dữ liệu xâu của C
string[const string & str];
8 [bằng nhau],
string[]; string[const char str]; // char là kiểu dữ liệu xâu của C
string[const string & str];
9 [khác nhau],
char* s_old = "ABC"; string s[s_old];
8 [lớn hơn],
char st[]="ABCDEF"; string s; s="XYZ"; cout