std::string의 일부분을 잘라내는 substr(substring) 메소드가 있습니다.

솔직히 쓸 때마다 좀 헷갈립니다. [a, b]인지 [a, a+b]인지 [a, b)인지..

이번에 글로 정리하면서 자세히 알아봅시다.

 

basic_string substr( size_type pos = 0, size_type count = npos ) const;

함수 정의입니다. 파라미터는 다음과 같습니다.

  • pos: position of the first character to include
  • count: length of the substring

설명을 볼까요?

Returns a substring [pos, pos+count). If the requested substring extends past the end of the string, or if count == npos, the returned substring is [pos, size()).

반환값은 [pos, pos+count)의 서브스트링입니다. pos부터 count개를 잘라서 반환합니다.

pos+count 범위가 string의 끝을 넘어가거나 count == npos이면 [pos, size())를 반환합니다. size가 10인 string의 substr(5, 100000)를 호출한다고 하면 [5, 10)을 반환한다는 것이죠.

pos > size() 인 경우 std::out_of_range 예외를 던집니다.

 

count 파라미터에 기본값으로 들어간 npos는 뭘까요?

static const size_type npos = -1;

size_type에 -1을 대입한 값입니다. size_type은 unsigned 정수니까 -1을 넣으면 오버플로우가 나서 max값으로 바뀝니다.  즉 string 타입이 가질 수 있는 최대 길이인 셈입니다.

std::npos는 보통 string::find에서 결과가 없을 때 반환하거나, substr에서 '무조건 끝부분까지'를 나타낼 때 씁니다.

반응형