strchr, strrchr 함수로 문자열에서 문자 찾기

  • 6 minutes to read

C 언어 strchr, strrchr 함수 요약 노트

  • strchr 함수: 문자열에서 특정 문자를 찾아 그 위치를 반환하는 함수
  • strrchr 함수: 문자열에서 특정 문자를 역순으로 찾아 그 위치를 반환하는 함수
  • 함수 원형
    • char* strchr(const char* str, int c);
    • char* strrchr(const char* str, int c);
      • str: 검색 대상이 되는 문자열
      • c: 검색하고자 하는 문자
      • 반환값: str 내에서 c의 첫 번째/마지막 출현 위치를 가리키는 포인터. 검색 실패 시 NULL 반환.
  • 예제 코드:
    • str 문자열에서 'a' 문자를 검색한 후, 첫 번째/마지막 출현 위치부터 끝까지의 문자열을 출력하는 예제.

코드: strchr_strrchr_note.c

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

int main(void)
{
    char str[] = "C Language";

    char* ptr = strchr(str, 'a');   // str 문자열에서 'a' 문자 검색
    printf("%s\n", ptr);            // ange

    ptr = strrchr(str, 'a');        // str 문자열에서 'a' 문자 역순 검색
    printf("%s\n", ptr);            // age

    return 0;
}
  • strchr, strrchr 함수 활용 예시 : 문자열에서 특정 문자 찾기, 문자열 분리, 문자열 삭제 등

strchr 함수로 문자열에서 문자 찾기

string.h 헤더 파일에 선언되어 있는 "문자열에서 문자 검색(String Character)"을 의미하는 strchr 함수를 사용하면 문자열에서 특정 문자를 검색할 수 있습니다. 문자 검색은 대소문자를 구분합니다.

strchr 함수의 시그니처는 다음과 같습니다.

char *strchr(
   const char *str, // 문자열 포인터 
   int c // 찾을 문자
);
  • strchr(문자열배열명, 찾을문자);
    • 지정한 문자열 배열에서 특정 문자가 앞에서부터 처음 나오는 포인터를 반환하거나, 찾을 문자가 없으면 NULL을 반환합니다.
    • 찾을 문자는 대소문자를 구분합니다.

strchr 함수 사용 예제를 살펴보겠습니다.

코드: strchr_demo.c

// strchr 함수로 문자열에서 문자 찾기 
#include <string.h> // strchr()
#include <stdio.h>

int main(void)
{
    char string[] = "C language"; // 원본 문자열 
    int  ch = 'a'; // 찾을 문자

    char* pfind; // 찾은 문자열 담을 그릇
    int position = 0; // 찾은 문자의 위치

    // 정방향 검색
    pfind = strchr(string, ch);

    if (pfind != NULL) // 찾지 못하면 NULL 반환
    {
        printf("%s\n", pfind); // anguage
        position = (int)(pfind - string + 1); // 앞에서부터 찾은 문자의 위치 계산
        printf("%d\n", position); // 4 
    }

    return 0; 
}
anguage
4

"C language" 문자열에서 'a'"C la..."처럼 앞에서부터 4번째 위치에서 찾을 수 있습니다. 그래서 4번째 이후로의 문자열을 모두 pfind 포인터에 담아 출력하면 "anguage"가 출력되고 위치 번호는 4가 출력됩니다.

만약, 찾을 문자를 "C language"에 없는 'z' 문자를 넣으면 실행 결과 아무것도 출력되지 않습니다.

int  ch = 'z'; // 찾을 문자

찾은 문자의 위치는 처음 문자열의 시작에서 찾은 위치까지의 거리를 빼기로 구하면 되는데요. 인덱스가 아닌 위치 번호를 구해야하기에 1을 더한 값으로 계산합니다.

position = (int)(pfind - string + 1);

strrchr 함수로 문자열에서 역방향으로 문자 검색하기

strchr 함수와 동일한 사용법으로 뒤에서부터 첫 번째로 나오는 문자를 찾는 strrchr 함수도 있습니다.

코드: strrchr_demo.c

// strrchr 함수로 문자열 뒤에서부터 문자 찾기 
#include <string.h> // strrchr()
#include <stdio.h>

int main(void)
{
    char string[] = "C language"; // 원본 문자열 
    int  ch = 'a'; // 찾을 문자

    char* pfind; // 찾은 문자열 담을 그릇
    int position = 0; // 찾은 문자의 위치

    // 역방향 검색
    pfind = strrchr(string, ch);

    if (pfind != NULL) // 찾지 못하면 NULL 반환
    {
        printf("%s\n", pfind); // age
        position = (int)(pfind - string + 1); // 뒤에서부터 찾은 문자의 위치 계산
        printf("%d\n", position); // 8 
    }

    return 0;
}
age
8

"C language"에서 오른쪽에서부터 찾다보면 "......age" 위치에 있는 "age"가 검색이 됩니다. 다만, 위치 번호는 뒤에서부터 세 번째인 3이 아닌 앞에서부터 계산되어 8이 됩니다.

퀴즈

  1. strchr 함수는 어떤 함수인가요?
  2. strrchr 함수는 무엇을 검색하는 함수인가요?
  3. strchr 함수와 strrchr 함수는 어떤 차이점이 있나요?
  4. strchr 함수와 strrchr 함수가 실패할 경우 각각 어떤 값을 반환하나요?
  5. 다음 코드의 실행 결과는 무엇인가요?

코드: strchr_strrchr_quiz.c

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

int main(void)
{
    char str[] = "C Language";
    char* ptr1 = strchr(str, 'a');
    char* ptr2 = strrchr(str, 'a');
    printf("%s\n", ptr1);
    printf("%s\n", ptr2);
    return 0;
}

정답:

  1. 특정 문자를 찾아 그 위치를 반환하는 함수입니다.
  2. 특정 문자를 역순으로 찾아 그 위치를 반환하는 함수입니다.
  3. strchr 함수는 문자열에서 처음 발견된 문자를 찾아 반환하지만, strrchr 함수는 문자열에서 마지막으로 발견된 문자를 찾아 반환합니다.
  4. 실패할 경우, 두 함수 모두 NULL을 반환합니다.
  5. ange, age
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com