std::string::find_last_not_of
#include <string>
// (1) Tìm kiếm từ một chuỗi string khác
size_type find_last_not_of( const string& str, size_type pos = npos ) const noexcept;
// (2) Tìm kiếm từ một chuỗi ký tự C-style
size_type find_last_not_of( const charT* s, size_type pos = npos ) const;
// (3) Tìm kiếm n ký tự đầu của một chuỗi ký tự C-style
size_type find_last_not_of( const charT* s, size_type pos, size_type n ) const;
// (4) Tìm kiếm một ký tự (ngược với tìm kiếm)
size_type find_last_not_of( charT c, size_type pos = npos ) const noexcept;
Tìm kiếm sự xuất hiện cuối cùng trong chuỗi hiện tại của bất kỳ ký tự nào không thuộc về một tập hợp các ký tự được chỉ định (có thể là một chuỗi khác, một chuỗi ký tự C-style, hoặc một tập hợp ký tự). Nói cách khác, nó tìm ký tự cuối cùng không khớp với bất kỳ ký tự nào trong tập hợp cho trước.
Tham số
str
- Chuỗi std::string chứa tập hợp các ký tự không cần tìm kiếm (phiên bản 1).
s
- Con trỏ đến chuỗi ký tự C-style (kết thúc bằng ký tự null) chứa tập hợp các ký tự không cần tìm kiếm (phiên bản 2, 3).
c
- Ký tự không cần tìm kiếm (phiên bản 4). Nghĩa là, hàm sẽ tìm ký tự cuối cùng khác với
c
.
pos
- Vị trí (index) lớn nhất trong chuỗi hiện tại để bắt đầu tìm kiếm ngược. Giá trị mặc định là
npos
(tìm kiếm trên toàn bộ chuỗi).
n
- Số lượng ký tự đầu tiên của chuỗi ký tự C-style
s
không cần tìm kiếm (phiên bản 3).
Giá trị trả về
size_type
- Nếu tìm thấy, trả về vị trí (index) của sự xuất hiện cuối cùng của bất kỳ ký tự nào không có trong tập hợp các ký tự cần tìm kiếm.
- Nếu không tìm thấy (tức là tất cả các ký tự trong chuỗi đều thuộc tập hợp cần tìm), trả về giá trị đặc biệt std::string::npos (thường là -1, nhưng bạn nên sử dụng std::string::npos để so sánh thay vì -1).
Đặc điểm
find_last_not_of()
tìm kiếm sự xuất hiện cuối cùng của bất kỳ ký tự nào không thuộc tập hợp các ký tự cần tìm.find_last_not_of()
phân biệt chữ hoa chữ thường (case-sensitive).- Nếu
pos
được cung cấp,find_last_not_of()
sẽ chỉ tìm kiếm trong phạm vi từ đầu chuỗi đến vị trípos
(bao gồm cả vị trípos
). - Giá trị trả về của
find_last_not_of()
là kiểusize_type
, thường là std::size_t. Đây là kiểu số nguyên không dấu. find_last_not_of()
thường được sử dụng để:- Tìm kiếm ký tự cuối cùng không phải là khoảng trắng trong một chuỗi.
- Tìm kiếm ký tự cuối cùng không phải là chữ số trong một chuỗi.
- Tìm kiếm ký tự cuối cùng không phải là nguyên âm trong một chuỗi.
- Kiểm tra xem một chuỗi có kết thúc bằng bất kỳ ký tự nào không thuộc một tập hợp cho trước hay không.
- Loại bỏ khoảng trắng ở cuối chuỗi.
Phân biệt với find(), rfind(), find_first_of(), find_last_of(), find_first_not_of(), và contains()
find()
: Tìm kiếm sự xuất hiện đầu tiên của toàn bộ chuỗi con hoặc ký tự.rfind()
: Tìm kiếm sự xuất hiện cuối cùng của toàn bộ chuỗi con hoặc ký tự.find_first_of()
: Tìm kiếm sự xuất hiện đầu tiên của bất kỳ ký tự nào trong một tập hợp ký tự.find_last_of()
: Tìm kiếm sự xuất hiện cuối cùng của bất kỳ ký tự nào trong một tập hợp ký tự.find_first_not_of()
: Tìm kiếm sự xuất hiện đầu tiên của bất kỳ ký tự nào không trong một tập hợp ký tự.find_last_not_of()
: Tìm kiếm sự xuất hiện cuối cùng của bất kỳ ký tự nào không trong một tập hợp ký tự.contains()
(từ C++23): Kiểm tra xem chuỗi có chứa chuỗi con hoặc ký tự hay không (trả vềbool
).
Ví dụ
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world! \t\n";
// (1) Tìm kiếm ký tự cuối cùng không phải khoảng trắng, tab, xuống dòng
size_t pos1 = str.find_last_not_of(" \t\n");
if (pos1 != std::string::npos) {
std::cout << "Last non-whitespace character found at position: " << pos1 << std::endl; // Output: 12
}
// (2) Tìm kiếm ký tự cuối cùng không phải là chữ cái
std::string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
size_t pos2 = str.find_last_not_of(letters);
if (pos2 != std::string::npos) {
std::cout << "Last non-letter character found at position: " << pos2 << std::endl; // Output: 15
}
// (3) Tìm kiếm n ký tự đầu trong chuỗi C-style không khớp
const char* digits = "0123456789";
size_t pos4 = str.find_last_not_of(digits, std::string::npos, 5); // Tìm kiếm ký tự cuối không phải là '0', '1', '2', '3', '4'
if (pos4 != std::string::npos) {
std::cout << "Last non-digit (from 0-4) found at position: " << pos4 << std::endl;// Output: 15
}
// (4) Tìm kiếm ký tự cuối cùng khác với '!'
size_t pos3 = str.find_last_not_of('!');
if (pos3 != std::string::npos) {
std::cout << "Last character not a '!' found at position: " << pos3 << std::endl; // Output: 14
}
// Tìm kiếm từ vị trí khác npos
size_t pos5 = str.find_last_not_of(" \t\n", 11); // Tìm ký tự không phải khoảng trắng, bắt đầu từ vị trí 11 trở về trước.
if (pos5 != std::string::npos) {
std::cout << "Last non-whitespace character before position 11 found at: " << pos5 << std::endl; // Output: 10
}
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 |
find_last_of | Tìm kiếm sự xuất hiện cuối cùng trong chuỗi hiện tại của bất kỳ ký tự nào thuộc về một tập hợp các ký tự được chỉ định |
find_first_not_of | Tìm kiếm sự xuất hiện đầu tiên trong chuỗi hiện tại của bất kỳ ký tự nào không thuộc về một tập hợp các ký tự được chỉ định |
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ó |