반응형

안녕하세요.

오늘은 C언어에서 문자를 검색하는 함수인 strchr 함수에 대해 알아보도록 하겠습니다.

strchr

함수 원형
char* strchr(const char *_Str, int _Val);

헤더 파일
string.h

리턴값
_Val와 같은 값을 가진 _Str문자열의 포인트값을 리턴해줍니다.
_Str에 _Val와 같은 값이 없다면 NULL을 리턴합니다.


설명
문자열의 첫번째 문자부터 마지막 문자까지 검색을 해서 처음 찾은 포인터를 리턴합니다.
만약에 찾을 대상 문자열에 같은 값을 가진 문자가 여러개 있어도 처음 찾은 포인터만 리턴하게 됩니다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
 
void main()
{
    char arrString[20= "Hello World";
    char *pCh1 = strchr(arrString, 'o');
    char *pCh2 = strchr(arrString, 'a');
 
    printf("strchr(arrString, 'W') : %s\n", pCh1);
    printf("strchr(arrString, 'a') : %s\n", pCh2);
}
 
cs

코드분석

7번째 줄에서(char *pCh1 = strchr(arrString, 'o');)는 arrString[20] 문자열 "Hello world"값 중 'o'를 찾게되면 "Hello World"의 다섯번째 문자를 포인터를 리턴하게 됩니다.

그로인해서 pCh1은 다섯번째 문자의 포인터값을 받아서 출력을 하게되면 다섯번째 문자부터 '\0'이전 값까지 출력이 됩니다.

 

8번째 줄에서(char *pCh2 = strchr(arrString, 'a');)는 arrString[20]값중 'a'를 가진 값이 없기 때문에 NULL값을 리턴하게 됩니다.

 

간단한 응용

간단하게 문자열에 특정 문자가 몇개가 있는지 확인하는 프로그램을 만들어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
void main()
{
    char arrString[20= "Hello World";
    int nCount = 0;
    char* pCh = arrString;
 
    while (pCh)
    {
        pCh = strchr(pCh, 'o');
        if (pCh)
        {
            pCh++;
            nCount++;
        }
    }
 
    printf("find count : %d", nCount);
}
 
cs

코드분석

8번째 줄(char* pCh = arrString;)에서 arrString의 시작 주소를 포인터인 pCh로 저장합니다.

12번째 줄(pCh = strchr(pCh, 'o');)에서 strchr함수를 이용해서 'o'문자 찾습니다.

찾은 후 그 위치를 pCh에 저장합니다.

그리고 찾은 위치의 포인터에 1을 더해서 다음 포인터를 저장합니다.

찾았기 때문에 nCount를 1증가시킵니다.

 while문에 pCh값이 null이 아니기 때문에 반복문으로 다시 한번 더 strchr함수를 이용해서 'o'를 찾습니다.

찾은 후 다시 pCh에 값을 저장합니다.

pCh와 nCount를 1씩 증가시킨 후 다시 while문으로 반복하여 'o'문자 찾습니다.

이제 더이상 'o'문자가 없기 때문에 strchr함수에서 null을 리턴하게 되면서 while문을 빠져나오게 됩니다.

반응형

+ Recent posts