c 언어/c 표준 라이브러리(Standard C Library)

C 언어 `string.h`의 문자열 검색 함수 - `strchr`와 `strstr`

임베디드 친구 2025. 2. 12. 09:23
728x90
반응형

C 언어에서 문자열을 다룰 때, 특정 문자나 문자열을 검색하는 기능이 필요할 때가 많습니다. 이를 위해 string.h 헤더 파일에서는 strchrstrstr 함수를 제공합니다. 이번 포스팅에서는 이 두 함수의 사용법과 동작 방식, 그리고 예제 코드를 살펴보겠습니다.


1. strchr 함수: 특정 문자 찾기

strchr 함수는 문자열에서 특정 문자가 처음 나타나는 위치를 찾아 반환합니다.

함수 원형

char *strchr(const char *str, int c);

매개변수

  • str: 검색할 문자열
  • c: 찾을 문자 (정수형 int로 전달되지만 내부적으로 char로 처리됨)

반환값

  • c 문자가 str에서 처음 나타나는 위치의 포인터 (char *) 반환
  • 문자가 없으면 NULL 반환

예제 코드

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Hello, world!";
    char ch = 'o';

    char *pos = strchr(str, ch);

    if (pos) {
        printf("문자 '%c'는 문자열에서 %ld 번째 위치에 있습니다.\n", ch, pos - str);
    } else {
        printf("문자 '%c'를 찾을 수 없습니다.\n", ch);
    }

    return 0;
}

실행 결과

문자 'o'는 문자열에서 4 번째 위치에 있습니다.

첫 번째 o 문자의 위치를 찾아 반환하는 것을 확인할 수 있습니다.


2. strstr 함수: 특정 문자열 찾기

strstr 함수는 문자열 내에서 특정 부분 문자열(서브스트링)을 찾을 때 사용됩니다.

함수 원형

char *strstr(const char *haystack, const char *needle);

매개변수

  • haystack: 검색할 대상 문자열
  • needle: 찾을 문자열

반환값

  • needlehaystack에 존재하면 해당 위치의 포인터 (char *) 반환
  • 찾을 문자열이 없으면 NULL 반환

예제 코드

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Hello, world!";
    const char *sub = "world";

    char *pos = strstr(str, sub);

    if (pos) {
        printf("문자열 \"%s\"는 \"%s\"에서 %ld 번째 위치에 있습니다.\n", sub, str, pos - str);
    } else {
        printf("문자열 \"%s\"를 찾을 수 없습니다.\n", sub);
    }

    return 0;
}

실행 결과

문자열 "world"는 "Hello, world!"에서 7 번째 위치에 있습니다.

문자열 "world"가 "Hello, world!"에서 7번째 위치(0부터 시작)에 있다는 것을 알 수 있습니다.


3. strchr vs strstr: 차이점

함수 찾는 대상 반환값
strchr 특정 문자 (char) 해당 문자의 포인터
strstr 문자열 (char *) 해당 문자열의 포인터

즉, strchr은 한 개의 문자 검색, strstr은 부분 문자열을 검색하는 차이가 있습니다.


4. 실전 활용 예제: 사용자 입력 검색

사용자로부터 입력받은 문자가 특정 문자열 내에 존재하는지 확인하는 프로그램을 만들어 보겠습니다.

#include <stdio.h>
#include <string.h>

int main() {
    char input[100];
    char keyword[20];

    printf("문자열을 입력하세요: ");
    fgets(input, sizeof(input), stdin);

    printf("검색할 단어를 입력하세요: ");
    fgets(keyword, sizeof(keyword), stdin);

    // 개행 문자 제거
    input[strcspn(input, "\n")] = 0;
    keyword[strcspn(keyword, "\n")] = 0;

    char *found = strstr(input, keyword);

    if (found) {
        printf("\"%s\"가 문자열에서 발견되었습니다!\n", keyword);
    } else {
        printf("\"%s\"를 찾을 수 없습니다.\n", keyword);
    }

    return 0;
}

실행 예시

문자열을 입력하세요: This is a simple test.
검색할 단어를 입력하세요: simple
"simple"가 문자열에서 발견되었습니다!

사용자가 입력한 문자열에서 특정 단어를 검색하는 기능을 구현한 예제입니다.


5. 마무리

이번 포스팅에서는 C 언어 string.h 라이브러리에서 문자열을 검색할 때 사용하는 strchrstrstr 함수에 대해 알아보았습니다. strchr은 단일 문자 검색, strstr은 부분 문자열 검색을 담당합니다. 이를 활용하면 문자열 탐색을 효과적으로 수행할 수 있습니다.

반응형