std::string::npos
#include <string>
static const size_type npos = -1;
Là một giá trị hằng số tĩnh (static constant) đặc biệt, kiểu size_type
, được sử dụng để biểu thị "không tìm thấy vị trí" hoặc "đến cuối chuỗi" trong các hàm thành viên của std::string như find()
, rfind()
, substr()
, replace()
,...
Tham số
Không có tham số
Giá trị trả về
- Giá trị của
npos
thường là -1 (khi chuyển đổi -1 sang kiểu số nguyên không dấu, nó sẽ trở thành giá trị lớn nhất có thể biểu diễn được bởi kiểu đó). Tuy nhiên, bạn không nên dựa vào giá trị cụ thể này.
Đặc điểm
- Luôn luôn sử dụng std::string::npos (hoặc std::wstring::npos, std::u16string::npos, std::u32string::npos cho các kiểu chuỗi tương ứng) để so sánh với kết quả của các hàm tìm kiếm. Không so sánh với -1 mặc dù nó có thể hoạt động trên một số trình biên dịch, vì giá trị cụ thể của npos có thể thay đổi theo implementation.
npos
là một giá trị tĩnh (static), vì vậy bạn truy cập nó thông qua tên lớp (std::string::npos), không phải thông qua đối tượng cụ thể của lớp.npos
có kiểusize_type
, là một kiểu số nguyên không dấu.npos
thường được sử dụng để:- Kiểm tra kết quả của các hàm tìm kiếm trong chuỗi (
find()
,rfind()
,find_first_of()
,...). Nếu hàm trả vềnpos
, điều đó có nghĩa là không tìm thấy chuỗi con hoặc ký tự cần tìm. - Chỉ định độ dài "đến cuối chuỗi" trong các hàm như
substr()
,replace()
,erase()
.
- Kiểm tra kết quả của các hàm tìm kiếm trong chuỗi (
Ví dụ
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
// Tìm vị trí của "world"
size_t pos = str.find("world");
if (pos != std::string::npos) {
std::cout << "\"world\" found at position: " << pos << std::endl;
} else {
std::cout << "\"world\" not found.\n";
}
// Tìm vị trí của "xyz" (không tồn tại)
size_t pos2 = str.find("xyz");
if (pos2 == std::string::npos) {
std::cout << "\"xyz\" not found.\n";
}
// substr() với npos (lấy đến hết chuỗi)
std::string sub = str.substr(7, std::string::npos); // Tương đương str.substr(7);
std::cout << "sub: " << sub << std::endl;
return 0;
}