1. Phép so sánh
Như đã đề cập ở phần trước, máy tính sử dụng một bảng chữ cái gồm 256 kí tự được đánh số từ 0 tới 255 , mỗi kí tự đều được mã hóa bằng những bit nhị phân, gọi là bảng mã ASCII. Hai chuỗi kí tự được so sánh với nhau dựa trên bảng mã này. Quy trình so sánh hai chuỗi kí tự và
trong
diễn ra như’ sau:
– Các kí tự được đánh số từ 0 ở mỗi chuỗi, sau đó tìm vị trí đầu tiên sao cho
. Khi đó, nếu
nằm sau
trong bảng mã ASCIl thì chuỗi
sẽ lớn hơn chuỗi
, ngược lại chuỗi
Iớn hơn chuỗi
.
– Trong trường hợp không tìm được vị trí thỏa mãn thì chuỗi nào dài hơn sẽ là chuỗi lớn hơn.
– Nếu cả hai trường hợp trên không xảy ra thì kết luận chuỗi bằng chuỗi
.
Các toán tử có thể được sử dụng trực tiếp để so sánh hai kí tự hoặc hai chuỗi trong
, tất nhiên là theo quy tắc nêu trên vì hệ thống đã có sẵn các toán tử so sánh nạp chồng cho kiểu chuỗi.
Ví dụ 1:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Tôi đi học";
string s2 = "Tôi đi ngủ";
cout << "Chuỗi lớn hơn là: "
if (s1 > s2)
cout << s1;
else
cout << s2;
}
Kết quả chạy chương trình sẽ là:
Chuỗi lớn hơn là: Tôi đi ngủ
Chuỗi Tôi đi học
nhỏ hơn chuỗi Tôi đi ngủ
vì kí tự n
lớn hơn kí tự h
trong bảng mã ASCII. Một điều rất thú vị trong so sánh chuỗi, đó là mặc dù số 100 lớn hơn số 90, nhưng chuỗi 100 sẽ nhỏ hơn chuỗi 90, vì kí tự 1 đứng trước kí tự 9 trong bảng mã ASCII. Do đó, khi so sánh các số ở dạng chuỗi cần hết sức chú ý (vấn đề này sẽ được nhắc tới trong chủ đề Xử lý số nguyên lớn).
2. Phép nối chuỗi
Khác với phép cộng ở kiểu số, toán tử +
khi được kết hợp với hai chuỗi có ý nghĩa là nối hai chuỗi đó với nhau.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Ngày mai ";
string s2 = "tôi đi học.";
cout << s1 + s2;
}
Với đoạn code trên, kết quả thu được là:
Ngày mai tôi đi học.
3. Các hàm xử lý chuỗi trong C++
Khi khai báo string s;
, bảng dưới đây là các hàm xử lý có thể sử dụng trong thư viện <string> của C++:
![](https://vncode.tech/wp-content/uploads/2022/10/image-3.png)
![](https://vncode.tech/wp-content/uploads/2022/10/image-4.png)
4. Duyệt chuỗi
Để duyệt qua các phần tử trên chuỗi, ta sử dụng một vòng lặp từ vị trí đầu tiên tới vị trí cuối cùng của chuỗi. Lớp <string>
cung cấp cú pháp {Tên_chuỗi}.size()
để lấy độ dài của chuỗi, mà ta biết rằng các phần tử trong chuỗi được đánh số từ vị trí 0,0, nên cú pháp duyệt chuỗi như sau:
for ({Biến_đếm} = {Vị_trí_đầu}; {Biến_đếm} < {Tên_chuỗi}.size(); {Tăng_giảm_biến_đếm})
{
{Các_câu_lệnh};
}
Chẳng hạn, để duyệt các phần tử của một chuỗi ss từ đầu tới cuối chuỗi, ta viết như sau:
for (int i = 0; i < s.size(); ++i)
Ngoài ra, chúng ta còn có thể duyệt qua tất cả các phần tử trong chuỗi theo cú pháp duyệt trực tiếp phần tử như sau:
for (char {Tên_biến_kí_tự}: {Tên_chuỗi})
{
{Các_câu_lệnh};
}