C++

문자 검색 함수 - strchr

오늘 알고리즘 문제를 풀던 중, 문자 검색 함수인 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의 위치를 찾을 수 있다.