소소한 개발 공부
[프로그래머스] 문자열안에 문자열 string.find, string::npos 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120908
문자열 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/
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
static const size_t npos = -1;
c++의 멤버 상수로, 주로 string 에서 match 하지 못했을 때 사용하는 상수라고 한다.
As a return value, it is usually used to indicate no matches.
'프로그래밍 > C & C++' 카테고리의 다른 글
[프로그래머스] 특정 문자 제거하기 string.find, string.replace (0) | 2022.10.21 |
---|---|
[프로그래머스] 문자열 뒤집기 string, reverse (0) | 2022.10.21 |
error : 'char' is promoted to 'int' when passed through '...' (0) | 2021.02.02 |
strlcat()의 사용 (0) | 2020.12.01 |
strlcpy() 의 사용 (0) | 2020.12.01 |