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에서 '무조건 끝부분까지'를 나타낼 때 씁니다.
반응형
'프로그래밍 > C++' 카테고리의 다른 글
C++ lower_bound, upper_bound 사용법 (0) | 2020.05.01 |
---|---|
C++ vector에 존재하는 원소의 인덱스 찾기 (0) | 2020.04.29 |
C++ 구글식 명명법(naming convention) (0) | 2020.04.21 |
C++ std::pair 정렬방법 (0) | 2020.04.15 |
C++ std::accumulate 간단 사용법 및 주의사항 (3) | 2020.04.14 |