Hỏi về string::npos

Em đọc lệnh mà k hiểu. Mọi người có thể giải thích cho e lệnh này đc k ạ.

bool isPunc(char c) {
	return delim.find(c) != std::string::npos;
}

Tham khảo:
http://www.cplusplus.com/reference/string/string/npos/
http://www.cplusplus.com/reference/string/string/find/

4 Likes

giá trị npos giống như là null ấy. delim.find(c) nếu ko tìm thấy c trong delim thì cũng phải trả về 1 giá trị size_t nào đó (bình thường nếu tìm thấy c trong delim thì giá trị này là vị trí của c trong delim), nên ở đây phải tạo 1 giá trị “ma” là npos tượng trưng cho vị trí của c trong delim khi c ko có trong delim

ví dụ
“ccc”.find(‘c’) trả về 0 là vị trí ký tự ‘c’ đầu tiên
“abc”.find(‘c’) trả về 2
“aaa”.find(‘c’) trả về npos vì ko tìm thấy ‘c’ trong “aaa”

thông thường giá trị npos này là size_t(-1) = 264 - 1 nếu là chương trình 64-bit. Nếu 32-bit thì có thể là 232 - 1. Chọn giá trị này vì lỡ chuỗi có dài 232 - 1 ký tự cũng ko thể trả về vị trí 232 - 1 vì đây là vị trí cuối cùng của ký tự trong chuỗi dài 232 ký tự :V Mà con trỏ 32-bit chỉ có thể chứa tới giá trị 232 - 1 nên ko có vụ chuỗi dài 232 ký tự, vậy nếu giá trị trả về là 232 - 1 thì tức là c ko nằm trong delim đó.

14 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?