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

std::string::substr

#include <string>

string substr( size_type pos = 0, size_type count = npos ) const;

Trích xuất một chuỗi con (substring) từ một chuỗi std::string hiện có.

Tham số

pos

  • Vị trí (index) bắt đầu của chuỗi con cần trích xuất. Giá trị mặc định là 0 (trích xuất từ đầu chuỗi).

count

  • Số lượng ký tự cần trích xuất. Giá trị mặc định là npos (một giá trị đặc biệt của size_type, thường là -1), có nghĩa là trích xuất tất cả các ký tự từ vị trí pos đến hết chuỗi.

Giá trị trả về

  • Một đối tượng std::string mới chứa chuỗi con được trích xuất.

Đặc điểm

  1. Phạm vi hợp lệ của pos là từ 0 đến size(). Nếu pos bằng size(), một chuỗi rỗng sẽ được trả về.
  2. Nếu pos lớn hơn size(), ngoại lệ std::out_of_range sẽ được ném ra.
  3. Nếu count lớn hơn số ký tự còn lại từ vị trí pos, substr() sẽ trích xuất tất cả các ký tự còn lại từ pos đến hết chuỗi.
  4. substr() tạo ra một bản sao của chuỗi con, không thay đổi chuỗi gốc.
  5. std::string::npos là một giá trị hằng số tĩnh đặc biệt, thường được gán giá trị -1, đại diện cho "đến cuối chuỗi".
  6. substr() thường được sử dụng để:
    • Lấy một phần của chuỗi.
    • Tách chuỗi thành các phần nhỏ hơn.
    • Xử lý các chuỗi con trong các thuật toán và ứng dụng.

Ví dụ

#include <iostream>
#include <string>

int main() {
std::string str = "Hello, world!";

// Trích xuất chuỗi con "world" (từ vị trí 7, 5 ký tự)
std::string sub1 = str.substr(7, 5);
std::cout << "sub1: " << sub1 << std::endl;

// Trích xuất chuỗi con từ vị trí 7 đến hết chuỗi
std::string sub2 = str.substr(7);
std::cout << "sub2: " << sub2 << std::endl;

// Trích xuất chuỗi con từ đầu đến vị trí 5
std::string sub3 = str.substr(0, 5);
std::cout << "sub3: " << sub3 << std::endl;

// Trích xuất toàn bộ chuỗi (giống như copy)
std::string sub4 = str.substr();
std::cout << "sub4: " << sub4 << std::endl;

// Cố gắng truy cập ngoài phạm vi
try {
std::string sub5 = str.substr(20); // Vị trí 20 ngoài phạm vi
}
catch (const std::out_of_range& oor) {
std::cerr << "Out of Range error: " << oor.what() << std::endl;
}

return 0;
}

Các hàm liên quan

replaceThay thế một phần của chuỗi bằng một nội dung mới
dataTrả về một con trỏ đến mảng ký tự bên trong mà std::string sử dụng để lưu trữ nội dung của chuỗi
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
assignGán nội dung mới cho chuỗi, thay thế nội dung hiện tại của nó