developer tip

string :: npos는 무엇을 의미합니까?

copycodes 2020. 10. 18. 18:30
반응형

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_typefind 함수의 반환 유형에 사용해야 합니다. 그렇지 않으면 비교가 string::npos작동하지 않을 수 있습니다. size_type는 문자열 할당 자에 의해 정의되며 unsigned정수 유형 이어야합니다 . 기본 할당자인 allocator는 type size_tsize_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

반응형