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

std::string::find_first_of

#include <string>

// (1) Tìm kiếm từ một chuỗi string khác
size_type find_first_of( const string& str, size_type pos = 0 ) const noexcept;

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

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

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

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 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ự).

Tham số

str

  • Chuỗi std::string chứa tập hợp các ký tự 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ự 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) bắt đầu tìm kiếm trong chuỗi hiện tại. Giá trị mặc định là 0 (tìm kiếm từ đầu 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 đầu tiên của bất kỳ ký tự nào trong tập hợp các ký tự cần tìm kiếm.
  • 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. 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 tập hợp các ký tự cần tìm.
  2. find_first_of() phân biệt chữ hoa chữ thường (case-sensitive).
  3. Nếu pos vượt quá kích thước của chuỗi, find_first_of() sẽ trả về std::string::npos.
  4. Giá trị trả về của find_first_of() là kiểu size_type, thường là std::size_t. Đây là kiểu số nguyên không dấu.
  5. find_first_of() thường được sử dụng để:
    • Tìm kiếm nguyên âm đầu tiên trong một chuỗi.
    • Tìm kiếm dấu cách đầu tiên trong một chuỗi.
    • Tìm kiếm bất kỳ ký tự đặc biệt nào trong một chuỗi.
    • Kiểm tra xem một chuỗi có chứa bất kỳ ký tự nào từ một tập hợp cho trước hay không.
Phân biệt với find(), rfind(), 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 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!";

// (1) Tìm kiếm từ một chuỗi string khác
std::string vowels = "aeiouAEIOU";
size_t pos1 = str.find_first_of(vowels);
if (pos1 != std::string::npos) {
std::cout << "First vowel found at position: " << pos1 << std::endl; // Output: 2
}

// (2) Tìm kiếm từ một chuỗi ký tự C-style
const char* punctuation = ",.?!";
size_t pos2 = str.find_first_of(punctuation);
if (pos2 != std::string::npos) {
std::cout << "First punctuation found at position: " << pos2 << std::endl; // Output: 5
}

// (3) Tìm kiếm n ký tự đầu của một chuỗi ký tự C-style
const char* digits = "0123456789";
size_t pos5 = str.find_first_of(digits, 0, 5); // Tìm kiếm '0', '1', '2', '3', '4'
if(pos5 != std::string::npos){
std::cout << "First digit (from 0-4) found at position: " << pos5 << std::endl;
} else {
std::cout << "No digit from 0-4 found" << std::endl; // Output: No digit from 0-4 found
}

// (4) Tìm kiếm một ký tự
size_t pos3 = str.find_first_of(' ');
if (pos3 != std::string::npos) {
std::cout << "First space found at position: " << pos3 << std::endl; // Output: 6
}

// Tìm kiếm từ vị trí khác 0
size_t pos4 = str.find_first_of(vowels, 3); // Tìm nguyên âm bắt đầu từ vị trí 3
if (pos4 != std::string::npos) {
std::cout << "First vowel starting from position 3 found at: " << pos4 << std::endl; // Output: 4
}

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_first_not_ofTì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
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ó