Chuyển tới nội dung chính

std::string::rfind

#include <string>

// (1) Tìm kiếm chuỗi con
size_type rfind( const basic_string& str, size_type pos = npos ) const noexcept;

// (2) Tìm kiếm chuỗi ký tự C-style
size_type rfind( const charT* s, size_type pos = npos ) const;

// (3) Tìm kiếm n ký tự đầu của chuỗi ký tự C-style
size_type rfind( const charT* s, size_type pos, size_type n ) const;

// (4) Tìm kiếm ký tự
size_type rfind( charT c, size_type pos = npos ) const noexcept;

Tìm kiếm sự xuất hiện cuối cùng của một chuỗi con (substring), một ký tự, hoặc một chuỗi ký tự C-style bên trong một chuỗi std::string. Ngược lại với find() tìm kiếm từ đầu chuỗi, rfind() tìm kiếm từ cuối chuỗi trở ngược lại.

Tham số

str

  • Chuỗi std::string 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) cần tìm kiếm (phiên bản 2, 3).

c

  • Ký tự cần tìm kiếm (phiên bản 4).

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 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 chuỗi con, ký tự, hoặc chuỗi C-style trong chuỗi hiện tại.
  • Nếu không tìm thấy, 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

  1. rfind() tìm kiếm sự xuất hiện cuối cùng của chuỗi con hoặc ký tự. Để tìm kiếm sự xuất hiện đầu tiên, hãy sử dụng find().
  2. rfind() phân biệt chữ hoa chữ thường (case-sensitive).
  3. Nếu pos được cung cấp, rfind() 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).
  4. Giá trị trả về của rfind() là kiểu size_type, thường là std::size_t. Đây là kiểu số nguyên không dấu.
  5. rfind() thường được sử dụng để:
    • Kiểm tra xem một chuỗi con có tồn tại trong chuỗi lớn hay không, tính từ cuối chuỗi.
    • Xác định vị trí cuối cùng của một chuỗi con hoặc ký tự trong chuỗi.
    • Trích xuất một phần của chuỗi dựa trên vị trí tìm thấy từ cuối.
    • Thực hiện các thao tác xử lý chuỗi dựa trên kết quả tìm kiếm từ cuối lên.
Phân biệt với find(), find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of(), và contains()
  • find(): Tìm kiếm sự xuất hiện đầu tiên của chuỗi con hoặc ký tự.
  • rfind(): Tìm kiếm sự xuất hiện cuối cùng của 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! This is a test string. Hello!";

// (1) Tìm kiếm chuỗi con
size_t pos1 = str.rfind("Hello");
if (pos1 != std::string::npos) {
std::cout << "Last occurrence of \"Hello\" at position: " << pos1 << std::endl;
} else {
std::cout << "\"Hello\" not found.\n";
}

// (2) Tìm kiếm chuỗi ký tự C-style
size_t pos2 = str.rfind("world");
if (pos2 != std::string::npos) {
std::cout << "Last occurrence of \"world\" at position: " << pos2 << std::endl;
}

// (3) Tìm kiếm n ký tự đầu của chuỗi ký tự C-style
const char* cstr = "testing";
size_t pos3 = str.rfind(cstr, std::string::npos, 4); // Tìm "test"
if (pos3 != std::string::npos) {
std::cout << "Last occurrence of \"test\" at position: " << pos3 << std::endl;
}

// (4) Tìm kiếm ký tự
size_t pos4 = str.rfind('!');
if (pos4 != std::string::npos) {
std::cout << "Last occurrence of '!' at position: " << pos4 << std::endl;
}

// Tìm kiếm từ vị trí khác npos
size_t pos5 = str.rfind("is", 16); // Tìm "is" bắt đầu từ vị trí 16 trở về trước
if (pos5 != std::string::npos) {
std::cout << "Last occurrence of \"is\" before position 16 at: " << pos5 << std::endl;
}

return 0;
}

Các hàm liên quan

findTì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_ofTì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_last_not_ofTì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
replaceThay thế một phần của chuỗi bằng một nội dung mới
substrTrích xuất một chuỗi con từ một chuỗi std::string hiện có