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
- Phạm vi hợp lệ của chỉ số trong
at()
là từ 0 đếnsize() - 1
. at()
có kiểm tra phạm vi, do đó nó an toàn hơn so với toán tử[]
.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).- 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ốitry...catch
để xử lý ngoại lệ này. - Không giống như toán tử
[]
, hàmat()
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. 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ị.
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 |
substr | Trích xuất một chuỗi con từ một chuỗi std::string hiện có |
find | Tì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 |
replace | Thay thế một phần của chuỗi bằng một nội dung mới |