Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 문자열 검색 함수 완벽 정리: strchr부터 strtok까지

C 언어의 문자열 검색 함수란?

C 언어의 표준 라이브러리(<string.h>)는 문자열 안에서 특정 문자나 문자 집합을 찾는 데 유용한 다양한 문자열 검색 함수를 제공합니다. 대표적인 함수들은 다음과 같습니다.

char *strchr(const char *string, int c);문자열에서 문자 c가 처음 나타나는 위치를 찾습니다.
char *strrchr(const char *string, int c);문자열에서 문자 c가 마지막으로 나타나는 위치를 찾습니다.
char *strpbrk(const char *s1, const char *s2);s2에 포함된 문자 중 하나라도 s1에서 처음 나타나는 위치의 포인터를 반환하며, s2의 어떤 문자도 s1에 없으면 NULL 포인터를 반환합니다.
size_t strspn(const char *s1, const char *s2);s1의 시작 부분에서 s2와 일치하는 문자의 개수를 반환합니다.
size_t strcspn(const char *s1, const char *s2);s1의 시작 부분에서 s2와 일치하지 않는 문자의 개수를 반환합니다.
char *strtok(char *s1, const char *s2);s1이 가리키는 문자열을 토큰(token)들의 연속으로 분리합니다. 각 토큰은 s2가 가리키는 문자열에 포함된 하나 이상의 문자로 구분됩니다.
char *strtok_r(char *s1, const char *s2, char **lasts);strtok()와 동일한 기능을 수행하지만, 호출자가 반드시 문자열 저장용 포인터(lasts)를 직접 전달해야 한다는 점이 다릅니다. 스레드 환경에서 안전하게 사용할 수 있습니다.

strchr()와 strrchr(): 가장 기본적인 검색 함수

strchr()strrchr()는 단일 문자를 앞에서부터 또는 뒤에서부터 찾는 함수로, 사용법이 가장 간단합니다.

예제 1: strchr() 함수 사용하기

다음은 문자열 검색 함수를 활용한 C 프로그램입니다.

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

int main(void) {
    char *str1 = "Hello";
    char *ans;

    ans = strchr(str1, 'l');
    printf("%s\n", ans);

    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

llo

실행 후 ansstr1 + 2 위치, 즉 문자열에서 세 번째 문자인 첫 번째 'l'이 있는 곳을 가리킵니다. 이후의 문자들('llo')이 함께 출력되는 이유는 strchr()가 해당 위치의 포인터를 반환하기 때문입니다.

strpbrk(): 여러 문자 중 하나를 찾는 범용 함수

strpbrk()는 지정한 문자 그룹 중 어느 하나라도 처음 나타나는 위치를 찾는, 보다 일반화된 검색 함수입니다.

예제 2: strpbrk() 함수 사용하기

다음은 strpbrk() 함수를 활용한 C 프로그램입니다.

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

int main(void) {
    char *str1 = "Hello";
    char *ans;

    ans = strpbrk(str1, "aeiou");
    printf("%s\n", ans);

    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

ello

여기서 ansstr1 + 1 위치, 즉 모음 문자열 "aeiou" 중에서 문자열에 처음 등장하는 문자 'e'가 있는 곳을 가리킵니다.

마무리: 상황별 함수 선택 가이드

  • 단일 문자 검색: 앞에서 찾을 때는 strchr(), 뒤에서 찾을 때는 strrchr()
  • 여러 후보 문자 중 하나 검색: strpbrk()
  • 접두사 일치 검사: strspn(), strcspn()
  • 문자열 분리(토큰화): strtok(), 멀티스레드 환경에서는 strtok_r()

이처럼 목적에 맞는 함수를 선택하면 문자열 처리 코드를 훨씬 간결하고 안전하게 작성할 수 있습니다.