오늘 알고리즘 문제를 풀던 중, 문자 검색 함수인 strchr을 사용할 일이 생겨 관련 기능을 정리해보고자 포스팅을 올리게 되었다.
#include <string.h> // C++ 에서는 <cstring>
const char* strchr(const char* str, int character);
char* strchr(char* str, int character);
const char* 형이나 char*형 문자열 str 앞에서부터 문자 character를 찾고, 그 위치를 가리키는 포인터를 리턴한다.
마지막 NULL 문자도 검색이 가능하므로, 문자열의 끝을 가리키는 포인터를 얻기 위해 사용할 수도 있다.
예제 코드 1 - 문자열에서 특정 문자의 위치를 찾고 싶을 때
#include <iostream>
#include <cstring>
int main() {
char test[10] = "abcdefghi";
char* pnt = strchr(test, 'c'); //cdefghi
std::cout << pnt - test + 1 << std::endl;
}
결과

strchr의 결과값은 c부터 시작하는 문자열 "cdefghi"를 가리키는 포인터이며, test는 문자열의 시작 포인터이므로 pnt - test + 1로 해당 문자의 위치를 구할 수 있다.
예제 코드 2 - 문자열에서 특정 문자의 위치를 모두 찾고 싶을 때
#include <iostream>
#include <cstring>
int main() {
char test[20] = "abcdefcghiweclacqic";
char* pnt = strchr(test, 'c');
while (pnt != NULL) {
std::cout << "pos : " << pnt - test + 1 << std::endl;
pnt = strchr(pnt + 1, 'c');
}
}
결과

pnt는 검색 대상 문자 c부터 시작하는 문자열을 가리키는 포인터이므로, pnt+1은 검색한 문자 c의 다음 문자를 가리킨다. 여기에서 다시 c를 검색하면 문자열 test에 포함된 다음 c의 위치를 찾을 수 있다.
'C++' 카테고리의 다른 글
문자열 파싱 함수 - istringstream, ostringstream, stringstream (1) | 2021.02.12 |
---|---|
부분집합 판별 함수 - Includes (0) | 2021.01.12 |