std::string::compare
#include <string>
// (1) So sánh với một chuỗi string khác
int compare( const string& str ) const noexcept;
// (2) So sánh một phần của chuỗi hiện tại với một chuỗi string khác
int compare( size_type pos1, size_type count1, const string& str ) const;
// (3) So sánh một phần của chuỗi hiện tại với một phần của chuỗi string khác
int compare( size_type pos1, size_type count1, const string& str,
size_type subpos, size_type sublen = npos ) const;
// (4) So sánh với một chuỗi ký tự C-style
int compare( const charT* s ) const;
// (5) So sánh một phần của chuỗi hiện tại với một chuỗi ký tự C-style
int compare( size_type pos1, size_type count1, const charT* s ) const;
// (6) So sánh một phần của chuỗi hiện tại với n ký tự đầu của một chuỗi ký tự C-style
int compare( size_type pos1, size_type count1, const charT* s, size_type n ) const;
So sánh chuỗi hiện tại với một chuỗi khác (có thể là std::string, chuỗi ký tự C-style, hoặc một phần của chuỗi). Nó cung cấp một cách so sánh chi tiết hơn so với các toán tử so sánh (==
, !=
, <
, >
, <=
, >=
).
Tham số
str
- Chuỗi std::string cần so sánh (phiên bản 1, 2, 3).
pos1
- Vị trí (index) bắt đầu trong chuỗi hiện tại để bắt đầu so sánh (phiên bản 2, 3, 5, 6).
count1
- Số lượng ký tự trong chuỗi hiện tại cần so sánh, bắt đầu từ
pos1
(phiên bản 2, 3, 5, 6).
subpos
- Vị trí bắt đầu của chuỗi con trong
str
cần so sánh (phiên bản 3).
sublen
- Số lượng ký tự của chuỗi con trong
str
cần so sánh, bắt đầu từsubpos
(phiên bản 3). Nếusublen
lớn hơn số ký tự còn lại từsubpos
, hoặc nếusublen
là std::string::npos (giá trị mặc định), toàn bộ phần còn lại củastr
tính từsubpos
sẽ được so sánh.
s
- Con trỏ đến chuỗi ký tự C-style (kết thúc bằng ký tự null) cần so sánh (phiên bản 4, 5, 6).
n
- Số lượng ký tự đầu tiên của chuỗi ký tự C-style
s
cần so sánh (phiên bản 6).
Giá trị trả về
int
< 0
: Chuỗi hiện tại nhỏ hơn chuỗi/chuỗi con/chuỗi C-style được so sánh (theo thứ tự từ điển).> 0
: Chuỗi hiện tại lớn hơn chuỗi/chuỗi con/chuỗi C-style được so sánh (theo thứ tự từ điển).== 0
: Chuỗi hiện tại bằng với chuỗi/chuỗi con/chuỗi C-style được so sánh.
Đặc điểm
compare()
thực hiện so sánh theo thứ tự từ điển (lexicographical comparison).compare()
phân biệt chữ hoa chữ thường (case-sensitive).- Khi so sánh một phần của chuỗi, bạn cần đảm bảo rằng các vị trí (
pos1
,subpos
) và độ dài (count1
,sublen
,n
) là hợp lệ. Nếu không, chương trình có thể gặp lỗi hoặc hành vi không xác định. - Các phiên bản của
compare()
có thể ném ra ngoại lệ nếu có lỗi xảy ra (ví dụ: std::out_of_range nếupos1
,subpos
vượt quá phạm vi). compare()
thường được sử dụng khi:- Bạn cần so sánh chuỗi một cách chi tiết hơn là chỉ kiểm tra bằng/khác.
- Bạn cần so sánh một phần của chuỗi này với một phần của chuỗi khác.
- Bạn cần so sánh chuỗi std::string với chuỗi ký tự C-style.
- Bạn cần triển khai các thuật toán sắp xếp hoặc tìm kiếm tùy chỉnh dựa trên so sánh chuỗi.
Phân biệt với các toán tử so sánh (
==
, !=
, <
, >
, <=
, >=
)- Các toán tử so sánh (
==
,!=
,<
,>
,<=
,>=
) trả về giá trịbool
(true hoặc false). compare()
trả về giá trị số nguyên (int
) cho biết mối quan hệ chi tiết hơn giữa hai chuỗi (nhỏ hơn, lớn hơn, hoặc bằng nhau).compare()
cung cấp nhiều tùy chọn hơn để so sánh một phần của chuỗi.- Các toán tử so sánh thường dễ đọc và dễ sử dụng hơn cho các trường hợp so sánh đơn giản.
Ví dụ
#include <iostream>
#include <string>
int main() {
std::string str1 = "apple";
std::string str2 = "banana";
std::string str3 = "app";
// (1) So sánh toàn bộ chuỗi
int result1 = str1.compare(str2); // result1 < 0 (vì "apple" < "banana")
std::cout << "str1.compare(str2): " << result1 << std::endl;
// (2) So sánh một phần của chuỗi
int result2 = str1.compare(0, 3, str3); // So sánh "app" với "app" (result2 == 0)
std::cout << "str1.compare(0, 3, str3): " << result2 << std::endl;
// (3) So sánh một phần của chuỗi với một phần của chuỗi khác
int result3 = str1.compare(1, 2, str2, 0, 2); // So sánh "pp" với "ba" (result3 < 0)
std::cout << "str1.compare(1, 2, str2, 0, 2): " << result3 << std::endl;
// (4) So sánh với chuỗi ký tự C-style
const char* cstr = "apple";
int result4 = str1.compare(cstr); // result4 == 0
std::cout << "str1.compare(cstr): " << result4 << std::endl;
// (5) So sánh một phần của chuỗi với chuỗi ký tự C-style
const char* cstr2 = "application";
int result5 = str1.compare(0, 3, cstr2); // result5 < 0 (vì "app" < "application")
std::cout << "str1.compare(0, 3, cstr2): " << result5 << std::endl;
// (6) So sánh một phần của chuỗi với n ký tự đầu của chuỗi ký tự C-style
const char* cstr3 = "apply";
int result6 = str1.compare(0, 3, cstr3, 3); // So sánh "app" với "app" (result6 == 0)
std::cout << "str1.compare(0, 3, cstr3, 3): " << result6 << std::endl;
return 0;
}
Các hàm liên quan
find | Tìm kiếm sự xuất hiện đầu tiên của một chuỗi con, một ký tự, hoặc một chuỗi ký tự C-style bên trong một chuỗi std::string |
replace | Thay thế một phần của chuỗi bằng một nội dung mới |
substr | Trích xuất một chuỗi con từ một chuỗi std::string hiện có |
Toán tử quan hệ | So sánh hai chuỗi std::string với nhau |