std::find
cppreference : std::find
https://en.cppreference.com/w/cpp/algorithm/find
<algorithm> 헤더에있는 std::find 의 경우 벡터 등 여러 컨테이너에 사용되기 때문에
시작 이터레이터, 끝 이터레이터, 찾을 value 순으로 인자를 받는다.
string은 char 형의 배열이다 라는 전제로 사용되는 거라서 특정 문자의 포함 여부를 찾을 수는 있지만
문자열을 찾지는 못한다.
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "Hello, world!";
char target = 'o';
auto it = std::find(str.begin(), str.end(), target);
if (it != str.end()) {
std::cout << "'" << target << "'는 문자열의 " << std::distance(str.begin(), it) << "번째 위치에 있습니다." << std::endl;
} else {
std::cout << "'" << target << "'를 찾을 수 없습니다." << std::endl;
}
return 0;
}
std::string::find
때문에 string에는 find를 제공한다.
멤버 함수형식으로 호출해야 하며, iterator가 아니라 인덱스를 반환한다는 점이 특징
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;
첫 번째 인자로 찾을 문자열 혹은 char 형 문자를 받으며,
두번 째 인자로 찾을 시작 위치를 지정한다.
세 번째 인자는 검색할 부분 문자열의 길이이다.
반환값은 문자 위치인데 int가 아니라 size_t 이며, 찾지 못할 경우 std::string::npos 를 반환 한다.
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
std::string target = "world";
// std::string::find를 사용하여 부분 문자열 검색
size_t pos = str.find(target);
if (pos != std::string::npos) {
std::cout << "'" << target << "'는 문자열의 " << pos << "번째 위치에서 시작합니다." << std::endl;
} else {
std::cout << "'" << target << "'를 찾을 수 없습니다." << std::endl;
}
return 0;
}
std::string::rfind
std::string::find 의 뒤에서 부터 찾는 버전이다.
단, 앞에서부터의 시작 인덱스를 반환한다.
주어진 부분 문자열이 검색 문자열에서 단 한개만 존재한다면 결과값이 같다!
myString의 부분문자열중 pat이 포함된 가장 긴 문자열을 반환하는 예제
string solution(string myString, string pat) {
size_t pos = myString.rfind(pat);
return string(myString.begin(), myString.begin() + pos + pat.size());
}
'🌍 C++ Study > C++ 기초' 카테고리의 다른 글
C++ string 공백으로 자르기 split stringstream (0) | 2024.11.25 |
---|---|
C++ 문자열 소문자, 대문자로 바꾸기 tolower (0) | 2024.11.23 |
C++ std::transform 각 원소에 연산하기, vector 2배하기 (0) | 2024.11.21 |
C++ 역방향 반복자 rbegin() / rend() / base() (0) | 2024.11.20 |
C++ vector 두 벡터 합치기, 이어 붙이기 (0) | 2024.11.20 |