string :: npos는 무엇을 의미합니까?
string::npos
여기서 진술 은 무엇을 의미 합니까?
found=str.find(str2);
if (found!=string::npos)
cout << "first 'needle' found at: " << int(found) << 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
실패의 경우에하면 검색 문자열에서 문자열을 찾을 수 있습니다.
$21.4 - "static const size_type npos = -1;"
오류 / 찾을 수 없음 등을 나타내는 문자열 함수에 의해 반환됩니다.
npos는 find ()가 아무것도 찾지 못했다는 것을 알려주는 토큰 값입니다 (아마 -1 또는 그와 비슷한 것). find ()는 매개 변수가 처음 나오는지 확인하고 매개 변수가 시작되는 색인을 반환합니다. 예를 들어
string name = "asad.txt";
int i = name.find(".txt");
//i holds the value 4 now, that's the index at which ".txt" starts
if (i==string::npos) //if ".txt" was NOT found - in this case it was, so this condition is false
name.append(".txt");
정적 const size_t npos = -1;
size_t의 최대 값
npos는 size_t 유형의 요소에 대해 가능한 가장 큰 값을 가진 정적 멤버 상수 값입니다.
This value, when used as the value for a len (or sublen) parameter in string's member functions, means "until the end of the string".
As a return value, it is usually used to indicate no matches.
This constant is defined with a value of -1, which because size_t is an unsigned integral type, it is the largest possible representable value for this type.
참고URL : https://stackoverflow.com/questions/3827926/what-does-stringnpos-mean
'developer tip' 카테고리의 다른 글
SQL Developer에서 저장 프로 시저를 실행 하시겠습니까? (0) | 2020.10.19 |
---|---|
Dapper는 SQL 2008 테이블 반환 매개 변수를 지원합니까? (0) | 2020.10.19 |
jquery는로드 될 때 iframe 콘텐츠의 높이를 가져옵니다. (0) | 2020.10.18 |
RecyclerView에서 데이터 새로 고침 및 스크롤 위치 유지 (0) | 2020.10.18 |
기본 ActionBar 제목 글꼴 크기는 무엇입니까? (0) | 2020.10.18 |