소소한 개발 공부

[프로그래머스] 문자열안에 문자열 string.find, string::npos 본문

프로그래밍/C & C++

[프로그래머스] 문자열안에 문자열 string.find, string::npos

이내내 2022. 10. 21. 16:04

https://school.programmers.co.kr/learn/courses/30/lessons/120908

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문자열 str1 안에 문자열 str2가 있는지 판별하는 문제이다.

처음에는 한 글자씩 비교해서 str2 끝까지 비교했다면 문자열이 존재하는 걸로 판별하게 작성했다.

문제를 맞히고 다른 사람의 코드를 보니 내가 아직 C++ 함수를 잘 알지 못한다는 느낌을 받았다.

많은 사람들이 string.find 함수와 string::npos 값을 썼는데 둘 다 알지 못하는 거라 정리하고자 한다.

 

내 코드 :

int solution(string str1, string str2) {
    int i = 0, j = 0, k = 0;
    while (str1[i])
    {
		k = 0; j = 0;
        while (str1[i+k] == str2[j])
        {
            k++;j++;
        }
        if (j >= str2.length()) return 1;
        i++;
    }
	if (str1 == str2) return 1;
    return 2;
}

 

string.find 와 string::npos를 알게되고 난 후의 코드 :

int solution(string str1, string str2) {
    return str1.find(str2) != string::npos ? 1 : 2;
}

깔끔하다!

 

string.find(string)

문자열에서 원하는 문자열의 위치를 찾는 함수이다.

https://cplusplus.com/reference/string/string/find/

 

https://cplusplus.com/reference/string/string/find/

buffer (3)size_t find (const char* s, size_t pos, size_type n) const;

cplusplus.com

string (1)	
size_t find (const string& str, size_t pos = 0) const noexcept;

c-string (2)	
size_t find (const char* s, size_t pos = 0) const;

buffer (3)	
size_t find (const char* s, size_t pos, size_type n) const;

character (4)	
size_t find (char c, size_t pos = 0) const noexcept;

pos로 s를 탐색하여 문자열을 찾으면 첫번째로 match한 문자열의 첫번째 문자의 위치를 반환한다.

return the position of the first character of the first match.

못 찾으면, -1을 반환한다.

 

string::npos

https://cplusplus.com/reference/string/string/npos/?kw=string%3A%3Anpos 

 

https://cplusplus.com/reference/string/string/npos/?kw=string%3A%3Anpos

public static member constant <string> static const size_t npos = -1; Maximum value for size_t npos is a static member constant value with the greatest possible value for an element of type size_t. This value, when used as the value for a len (or sublen) p

cplusplus.com

static const size_t npos = -1;

c++의 멤버 상수로, 주로 string 에서 match 하지 못했을 때 사용하는 상수라고 한다.

As a return value, it is usually used to indicate no matches.