strstr() 함수는 문자열 처리(string handling)를 위해 사용되는 string.h 헤더 파일에 미리 정의된 표준 라이브러리 함수입니다. 이 함수는 메인 문자열(str1)에서 부분 문자열(str2)이 처음 나타나는 위치를 찾는 데 사용됩니다.
함수 문법
strstr() 함수의 기본 문법은 다음과 같습니다.
char *strstr( char *str1, char *str2);
매개변수
- str1: 검색 대상이 되는 원본(메인) 문자열
- str2: 메인 문자열 str1 안에서 찾고자 하는 부분 문자열
반환값
strstr() 함수는 부분 문자열을 성공적으로 찾은 경우, 해당 부분 문자열이 처음 나타나는 위치의 주소 포인터를 반환합니다. 만약 메인 문자열에서 부분 문자열을 찾지 못하면 NULL을 반환합니다.
참고: 문자열 매칭 과정에는 널 문자('\0')가 포함되지 않습니다. 즉, 함수는 널 문자를 만나면 그 지점에서 검색을 종료합니다.
기본 예제
다음 입출력 예시를 통해 strstr() 함수의 동작 방식을 살펴보겠습니다.
Input: str1[] = {"Hello World"}
str2[] = {"or"}
Output: orld
Input: str1[] = {"tutorials point"}
str2[] = {"ls"}
Output: ls point실전 코드 예제
#include <string.h>
#include <stdio.h>
int main() {
char str1[] = "Tutorials";
char str2[] = "tor";
char* ptr;
// str1에서 str2가 처음 나타나는 위치를 찾음
ptr = strstr(str1, str2);
if (ptr) {
printf("String is found\n");
printf("The occurrence of string '%s' in '%s' is '%s'", str2, str1, ptr);
}
else
printf("String not found\n");
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
String is found The occurrence of string 'tor' in 'Tutorials' is 'torials
출력 결과에서 볼 수 있듯이, 반환된 포인터는 일치하는 부분부터 문자열 끝까지 전체를 가리키므로 "torials"가 출력됩니다.
응용: strstr()로 문자열 치환하기
strstr() 함수는 단순 검색 외에도 문자열의 특정 부분을 교체(substitution)하는 데에도 활용할 수 있습니다. 예를 들어, 부분 문자열 str2가 처음 발견된 위치부터의 내용을 새로운 문자열로 대체하고 싶다면 다음과 같이 구현할 수 있습니다.
Input: str1[] = {"Hello India"}
str2[] = {"India"}
str3[] = {"World"}
Output: Hello World동작 원리: str1에서 str2를 발견하면, 해당 위치부터 str3의 내용으로 대체됩니다.
치환 코드 예제
#include <string.h>
#include <stdio.h>
int main() {
// 두 개의 문자열 준비
char str1[] = "Tutorialshub";
char str2[] = "hub";
char str3[] = "point";
char* ptr;
// str1에서 str2가 처음 나타나는 위치를 찾음
ptr = strstr(str1, str2);
// 결과 출력
if (ptr) {
strcpy(ptr, str3);
printf("%s\n", str1);
} else
printf("String not found\n");
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
Tutorialspoint
이처럼 strstr()로 찾은 위치 포인터에 strcpy()를 적용하면, 일치 지점부터 기존 문자열을 새 문자열로 손쉽게 교체할 수 있습니다. 단, 이 방법은 새 문자열이 기존 부분보다 길 경우 버퍼 오버플로우가 발생할 수 있으므로 실무에서는 배열 크기를 충분히 확보해야 합니다.