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

std::string::erase

#include <string>

// (1) Xóa một số ký tự bắt đầu từ vị trí cho trước
string& erase( size_type index = 0, size_type count = npos );

// (2) Xóa một ký tự tại vị trí được chỉ định bởi iterator
iterator erase( const_iterator pos );

// (3) Xóa một phạm vi ký tự được xác định bởi hai iterator
iterator erase( const_iterator first, const_iterator last );

Xóa bỏ một phần hoặc toàn bộ nội dung của chuỗi.

Tham số

index

  • Vị trí (index) của ký tự đầu tiên cần xóa (phiên bản 1). Giá trị mặc định là 0 (xóa từ đầu chuỗi).

count

  • Số lượng ký tự cần xóa, bắt đầu từ index (phiên bản 1). Giá trị mặc định là npos (một giá trị đặc biệt thường là -1), có nghĩa là xóa đến hết chuỗi.

pos

  • Iterator trỏ đến ký tự cần xóa (phiên bản 2).

first

  • Iterator trỏ đến ký tự đầu tiên trong phạm vi cần xóa (phiên bản 3).

last

  • Iterator trỏ đến phần tử ngay sau ký tự cuối cùng trong phạm vi cần xóa (phiên bản 3).

Giá trị trả về

*this

  • Tham chiếu đến chính đối tượng std::string hiện tại sau khi đã xóa. (Phiên bản 1)

iterator

  • Iterator trỏ đến ký tự theo sau phần tử cuối cùng bị xóa. Nếu không có phần tử nào như vậy (ví dụ: xóa phần tử cuối cùng), iterator trả về sẽ là end(). (Phiên bản 2, 3)

Đặc điểm

  1. erase() thay đổi trực tiếp nội dung của chuỗi, không tạo ra một chuỗi mới.
  2. Nếu index vượt quá size() của chuỗi trong phiên bản 1, ngoại lệ std::out_of_range sẽ được ném ra.
  3. erase() có thể làm thay đổi size() nhưng không làm thay đổi capacity() của chuỗi (trừ khi shrink_to_fit() được gọi sau đó).
  4. erase() có thể làm vô hiệu hóa (invalidate) các iterator, con trỏ và tham chiếu đến các phần tử của chuỗi từ vị trí bị xóa trở đi.
  5. Các phiên bản của erase() có thể ném ra ngoại lệ nếu có lỗi xảy ra (ví dụ: std::bad_alloc nếu không thể cấp phát đủ bộ nhớ - trường hợp này ít xảy ra với erase()).
  6. erase() thường được sử dụng để:
    • Xóa một phần của chuỗi.
    • Xóa một ký tự cụ thể khỏi chuỗi.
    • Loại bỏ các ký tự không mong muốn khỏi chuỗi.
    • Xóa toàn bộ nội dung của chuỗi (tương đương với clear()).

Ví dụ

#include <iostream>
#include <string>

int main() {
std::string str = "This is an example string.";

// (1) Xóa 6 ký tự đầu tiên
str.erase(0, 6);
std::cout << "str after erase(0, 6): " << str << std::endl;

// (2) Xóa dấu chấm cuối cùng
str.erase(str.size() - 1);
std::cout << "str after erase(str.size() - 1): " << str << std::endl;

// (3) Xóa từ "an" sử dụng find()
std::string::size_type pos = str.find("an");
if (pos != std::string::npos) {
str.erase(pos, 2);
}
std::cout << "str after erase(find(\"an\"), 2): " << str << std::endl;

// (4) Xóa từ iterator
std::string str2 = "0123456789";
auto it = str2.erase(str2.begin() + 3);
std::cout << "str2 after erase(str2.begin() + 3): " << str2 << std::endl;
std::cout << "Iterator returned by erase: " << *it << std::endl;

// (5) Xóa phạm vi
std::string str3 = "abcdefghijklmn";
auto it2 = str3.erase(str3.begin() + 2, str3.begin() + 5);
std::cout << "str3 after erase(str3.begin() + 2, str3.begin() + 5): " << str3 << std::endl;
std::cout << "Iterator returned by erase: " << *it2 << std::endl;

// (6) Xóa toàn bộ (tương đương clear())
str.erase(0, std::string::npos); // Hoặc str.erase();
std::cout << "str after erase(0, npos): " << str << std::endl;

return 0;
}

Các hàm liên quan

clearXóa tất cả các ký tự khỏi chuỗi, làm cho chuỗi trở thành rỗng
replaceThay thế một phần của chuỗi bằng một nội dung mới
insertChèn thêm nội dung (ký tự, chuỗi, hoặc phạm vi) vào bên trong chuỗi tại một vị trí xác định
assignGán nội dung mới cho chuỗi, thay thế nội dung hiện tại của nó
appendNối thêm nội dung vào cuối chuỗi hiện tại