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에서 '무조건 끝부분까지'를 나타낼 때 씁니다.


  1. binarywoo 2022.05.19 00:17 신고 댓글주소 수정/삭제 댓글쓰기

    안녕하세요, 토르비욘님. 글 잘 보았습니다. 근데 궁금한게 위 함수 정의에서 맨 끝의 "const"는 무슨 뜻인지 알 수 있을까요? 감사합니다.

    ex) basic_string substr( size_type pos = 0, size_type count = npos ) const; <-- "const" 부분 말입니다...!

    • vince joe 2022.05.19 00:32 신고 댓글주소 수정/삭제

      const 멤버함수는 객체 멤버변수를 수정하지 못합니다. (mutable 제외)

    • binarywoo 2022.05.19 16:41 신고 댓글주소 수정/삭제

      아하 이해했습니다! 답장 고맙습니다!
      혹시 하나더 물어봐도 될까요?

      저렇게 함수 문법을 해석(?)하는 방법을 몰라서 항상 보면 무슨뜻인지 모르고 지나갈 때가 많습니다.
      덕분에 const 키워드가 뒤에 붙으면 const 멤버 함수라는 것도 알게 되었구오...
      혹시 저런 함수 사용방법은 어떻게 공부하면 될까요...?
      핑프라면 죄송합니다. 어떻게 검색할지 몰라서 여쭤봅니다...!

      감사합니다.
      좋은 하루로 마무리 하시길 바랍니다! :)

    • vince joe 2022.05.21 11:07 신고 댓글주소 수정/삭제

      저는 거의 구글링으로 해결해요 ㅋㅋ
      예를 들면 말하신건 "c++ const after function signature" 이런식으로?
      C++ 함수는 보통 cppreference에서 많이 확인합니다ㅎㅎ(ex. https://en.cppreference.com/w/cpp/string/basic_string/substr)

  2. binarywoo 2022.05.23 16:11 신고 댓글주소 수정/삭제 댓글쓰기

    아하 그렇군요 감사합니다! 구글링 능력을 좀더 키워야겠네요! ㅎㅎㅎ