[C++ STL] string.find() - 문자열에서 원하는 문자열을 탐색한다.

    반응형

    *개인적인 공부 기록용으로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.


    size_type find(const basic_string& str, size_type pos = 0) const;      // (1)
    size_type find(const CharT* s, size_type pos, size_type count) const;  // (2)
    size_type find(const CharT* s, size_type pos = 0) const;               // (3)
    size_type find(CharT ch, size_type pos = 0) const;                     // (4)
    template <class T>
    size_type find(const T& t, size_type pos = 0) const;  // (5)

    string의 find() 멤버함수를 이용하면, 특정 문자열에서 원하는 문자열을 간편하게 찾을 수 있다.

    find() 함수는 총 5가지 형태로 오버로딩 되어 있는데, 자주 사용되는 형태만 몇가지 예시로 알아 보도록 하자.

     

    우선, find()는 string 라이브러리에 속한 멤버함수 이기에, string 라이브러리를 선언 해 주어야 한다.

    다음으로 탐색하고자 하는 문자열을 () 괄호 안에 큰따옴표와 함께 넣어주면 된다.

    #include <string>
    문자열이름.find("탐색할 문자열")

    return 값은 문자열 탐색에 성공했을 경우 찾는 문자의 첫 번째 인덱스 주소를 반환해 준다.

    문자열 탐색에 성공하지 못했을 경우에는 string::npos를 리턴해 주는데, 이는 가비지값 (무작위 long long 값) 이다.

     

    다음 코드는 "Hello World!" 문자열에서 "Hello" 문자열을 탐색하는 예제이다. Hello 문자열의 첫 번째 인덱스는 0 이기에 index 변수에는 0값이 담기게 된다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
      string str = "Hello World!";
      int index = str.find("Hello");
      cout << index << endl;
      return 0;
    }
    [출력] 0

     

    단일 문자를 탐색하고 싶다면, str.find('문자') 형태로 선언하면 된다. 이때 탐색하고자 하는 문자가 여러개면 가장 첫 번째 인덱스를 반환한다. 

    예를들어 다음 코드는 "Hello World" 문자열에서 문자 'o'를 탐색하는 코드인데, o가 4번째 인덱스와 7번째 인덱스에 중복해서 존재하기에 앞에 있는 o의 위치인 4를 반환한다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
      string str = "Hello World!";
      int index = str.find('o');
      cout << index << endl;
      return 0;
    }
    [출력] 4

     

    혹은 find 멤버함수의 2번째 인자에 값을 대입해 원하는 위치부터 탐색하도록 지정할 수 도 있다. 

    str.find('o',5); //5번째 인덱스 부터 문자 o를 탐색한다.

    다음 코드를 실행시켜 보면 5번째 인덱스 즉, 공백부터 탐색을 진행하기에 뒤에 존재하는 o의 인덱스값인 7이 출력된다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
      string str = "Hello World!";
      int index = str.find("o",5);
      cout << index << endl;
      return 0;
    }
    [출력] 7
    반응형

    댓글

    Designed by JB FACTORY