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

std::string::at

#include <string>

// Phiên bản non-const:
charT& at( size_type pos );

// Phiên bản const:
const charT& at( size_type pos ) const;

Truy cập đến ký tự tại một vị trí (index) cụ thể trong chuỗi, có kiểm tra phạm vi.

Tham số

pos

  • Chỉ số (index) của ký tự cần truy cập (bắt đầu từ 0). Kiểu dữ liệu là size_type, thường là std::size_t.

Giá trị trả về

  • Phiên bản non-const: Tham chiếu (charT&) đến ký tự tại vị trí pos.
  • Phiên bản const: Tham chiếu hằng (const charT&) đến ký tự tại vị trí pos.

Đặc điểm

  1. Phạm vi hợp lệ của chỉ số trong at() là từ 0 đến size() - 1.
  2. at() có kiểm tra phạm vi, do đó nó an toàn hơn so với toán tử [].
  3. at() trả về tham chiếu đến ký tự, cho phép thay đổi giá trị của ký tự đó (nếu là phiên bản non-const).
  4. Nếu chỉ số pos không hợp lệ (nhỏ hơn 0 hoặc lớn hơn hoặc bằng size()), at() sẽ ném ra ngoại lệ std::out_of_range. Bạn nên sử dụng khối try...catch để xử lý ngoại lệ này.
  5. Không giống như toán tử [], hàm at() kiểm tra xem chỉ số (index) có nằm trong phạm vi hợp lệ của chuỗi hay không. Nếu chỉ số nằm ngoài phạm vi, at() sẽ ném ra ngoại lệ std::out_of_range.
  6. at() có hai phiên bản:
    • Phiên bản non-const trả về tham chiếu đến ký tự tại vị trí đã cho, cho phép thay đổi giá trị của ký tự đó.
    • Phiên bản const trả về tham chiếu hằng đến ký tự, không cho phép thay đổi giá trị.
  7. at() thường được sử dụng để:
    • Truy cập và đọc giá trị của các ký tự riêng lẻ trong chuỗi một cách an toàn (có kiểm tra phạm vi).
    • Thay đổi giá trị của các ký tự riêng lẻ trong chuỗi một cách an toàn (chỉ với phiên bản non-const).
    • Sử dụng trong các trường hợp mà bạn không chắc chắn liệu chỉ số truy cập có hợp lệ hay không.

Ví dụ

#include <iostream>
#include <string>

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

// Truy cập ký tự sử dụng at()
char c1 = str.at(0); // c1 = 'H'
char c2 = str.at(7); // c2 = 'w'

std::cout << "Character at index 0: " << c1 << std::endl;
std::cout << "Character at index 7: " << c2 << std::endl;

// Thay đổi ký tự sử dụng at() (phiên bản non-const)
str.at(0) = 'h';
str.at(7) = 'W';

std::cout << "Modified string: " << str << std::endl;

// Cố gắng truy cập ngoài phạm vi
try {
char c3 = str.at(20); // Vị trí 20 nằm 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

[]Truy cập đến ký tự tại một vị trí cụ thể trong chuỗi
substrTrích xuất một chuỗi con từ một chuỗi std::string hiện có
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
replaceThay thế một phần của chuỗi bằng một nội dung mới