Thứ tự từ điển là một kiến thức quan trọng khi học về xâu ký tự, bài viết này mình sẽ hướng dẫn các bạn cách xác định thứ tự từ điển giữa các xâu ký tự cũng như các hàm và toán tử trong string đã cung cấp sẵn.
1. Thứ Tự Từ Điển (Lexicographically) Là Gì?
Thứ tự từ điển của xâu ký tự hiểu đơn giản là thứ tự abc trong bảng chữ cái, trong đó ký tự nào đứng trước trong bảng chữ cái sẽ có thứ tự từ điển nhỏ hơn.
Đối với chuỗi ký tự thì thứ tự từ điển của nó so với chuỗi ký tự khác được xác định bằng ký tự khác nhau đầu tiên của 2 xâu.
Quy tắc so sánh 2 xâu theo thứ tự từ điển :
- Nếu 2 xâu có cùng độ dài và giống nhau mọi ký tự thì bằng nhau, ví dụ "azbook" và "azbook"
- Nếu 2 xâu khác nhau thì ký tự đầu tiên khác nhau của 2 xâu sẽ quy định xâu nào có từ điển lớn hơn, nhỏ hơn. Ví dụ "azbookza" và "azbookabcz" thì chữ thứ 7 của 2 xâu này khác nhau và 'z' lớn hơn 'a' theo từ điển nên xâu "azbookza" lớn hơn "azbookabcz" về mặt từ điển
- Nếu 2 xâu không có ký tự khác nhau đầu tiên thì xâu nào dài hơn sẽ có từ điển lớn hơn, ví dụ "azbook" và "azbookblog" thì "azbookblog" có từ điển lớn hơn
- Chữ cái in hoa và in thường có thứ tự từ điển khác nhau và thứ tự từ điển của ký tự được quy định bởi mã ASCII
Một vài ví dụ về thứ tự từ điển của 2 xâu ký tự :
- "azbook" > "azBookzzz"
- "1234" > "zzz"
- "lan" < "lan di hoc lap trinh"
- "28tech" > "27tech"
- "azbook java" < "azbook@"
2. Toán Tử So Sánh String Và Hàm Compare()
Để so sánh 2 xâu trong C++ bạn có thể sử dụng luôn các toán tử so sánh như >, <, !=, ==...
Ngoài ra bạn có thể sử dụng hàm compare() hoặc tự cài đặt hàm này cho mình.
Ví dụ :
#include <string>
using namespace std;
int main() {
cout << boolalpha << ("azbook" == "azbook") << endl;
cout << boolalpha << ("azbook" != "azbook") << endl;
cout << boolalpha << ("azbookabc" < "azbookza") << endl;
cout << boolalpha << ("azBook" < "azbook") << endl;
cout << boolalpha << ("az book" < "az@book") << endl;
return 0;
}
Output :
false
true
true
true
Hàm compare() trong C++ được sử dụng để so sánh 2 xâu, hàm này sẽ trả về số nhỏ hơn, lớn hơn hoặc bằng 0 tùy vào từ điển của 2 xâu sử dụng. Khi hàm này trả về 0 nghĩa là 2 xâu này giống nhau.
Ví dụ :
#include <string>
using namespace std;
int main() {
string s = "azbook", t = "azBook", p = "azbook";
cout << s.compare(p) << endl;
cout << s.compare(t) << endl;
cout << t.compare(p) << endl;
return 0;
}
Output :
1
-1
Ngoài ra bạn cũng có thể tự cài đặt hàm này như là bài tập rèn luyện.