std::string::npos
다음 코드 스 니펫에서이 문구 는 무엇을 의미합니까?
found = str.find(str2);
if (found != std::string::npos)
std::cout << "first 'needle' found at: " << int(found) << std::endl;
답변
찾을 수 없음을 의미합니다.
일반적으로 다음과 같이 정의됩니다.
static const size_t npos = -1;
코드가 더 읽기 쉽기 때문에 -1 대신 npos와 비교하는 것이 좋습니다.
답변
string::npos
-1
비 위치를 나타내는 상수 (아마도 )입니다. find
패턴을 찾을 수 없을 때 메서드에 의해 반환됩니다 .
답변
에 대한 문서 string::npos
내용 :
npos는 size_t 유형의 요소에 대해 가능한 가장 큰 값을 가진 정적 멤버 상수 값입니다.
반환 값으로 일반적으로 실패를 나타내는 데 사용됩니다.
이 상수는 실제로 -1 (모든 특성에 대해) 값으로 정의되며, size_t는 부호없는 정수 유형이기 때문에이 유형에 대해 표현 가능한 가장 큰 값이됩니다.
답변
size_t
는 부호없는 변수이므로 ‘부호없는 값 =-1’은 자동으로 가능한 가장 큰 값이됩니다 size_t
. 18446744073709551615
답변
std::string::npos
항상 모든 std::string
인스턴스 의 범위를 벗어난 구현 정의 인덱스입니다 . 다양한 std::string
함수는 그것을 반환하거나 문자열 상황의 끝을 넘어서 신호를 보내기 위해 받아들입니다. 일반적으로 부호없는 정수 유형이며 해당 값은 일반적으로 std::numeric_limits<std::string::size_type>::max ()
(표준 정수 승격 덕분에) 일반적으로 -1
.
답변
string::size_type
find 함수의 반환 유형에 사용해야 합니다. 그렇지 않으면 비교가 string::npos
작동하지 않을 수 있습니다.
size_type
는 문자열 할당 자에 의해 정의되며 unsigned
정수 유형 이어야합니다 . 기본 할당자인 allocator는 type size_t
을 size_type
. -1
부호없는 정수 유형으로 변환 되기 때문에 npos는 해당 유형의 부호없는 최대 값입니다. 그러나 정확한 값은 type의 정확한 정의에 따라 다릅니다 size_type
. 불행히도이 최대 값은 다릅니다. 사실 (unsigned long)-1
과 다른 (unsigned short)-
한 경우 유형 다릅니다의 크기입니다. 따라서 비교
idx == std::string::npos
idx에 값 -1
과 idx가 있고 string::npos
유형이 다른 경우 false를 생성 할 수 있습니다.
std::string s;
...
int idx = s.find("not found"); // assume it returns npos
if (idx == std::string::npos) { // ERROR: comparison might not work
...
}
이 오류를 방지하는 한 가지 방법은 검색이 직접 실패하는지 확인하는 것입니다.
if (s.find("hi") == std::string::npos) {
...
}
그러나 종종 일치하는 문자 위치의 색인이 필요합니다. 따라서 또 다른 간단한 해결책은 npos에 대해 고유 한 부호있는 값을 정의하는 것입니다.
const int NPOS = -1;
이제 비교가 약간 다르고 훨씬 더 편리해 보입니다.
if (idx == NPOS) { // works almost always
...
}
답변
found
될 것입니다 npos
실패의 경우에하면 검색 문자열에서 문자열을 찾을 수 있습니다.