<개인공부>/[C언어, C++]

[C언어/C++] strchr 함수(문자 검색)에 대해서

BlockDMask 2019. 12. 31. 01:44
반응형

안녕하세요. BlockDMask입니다.
오늘은 C 스타일 char*, char[] 타입의 문자열에서 특정 문자를 검색하는 shrchr 함수에 대해서 알아보려 합니다.


▶ C언어, C++ 문자열 관련 함수들 포스팅

C언어 문자열 탐색 함수 strstr [바로가기]

C언어 문자 입출력 함수  getchar, putchar [바로가기]

C언어 문자열 입출력 함수 puts, gets [바로가기]

C언어 문자열 복사 strcpy, strncpy [바로가기]

C언어 문자열 이어붙이기 strcat [바로가기]

C언어 문자열 길이 구하기 strlen [바로가기]


<목차>

1. C언어, C++ strchr 함수에 대해서

2. strchr 함수 예제들 


1. strchr 함수에 대해서.

 

함수원형
> C언어 strchr
char* strchr(const char*, int c);

> C++ strchr

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


▶ 함수 설명
문자열 내에 일치하는 문자가 있는지 검사하는 함수입니다.

첫번째 매개변수 (char* str) : 검색할 문자열
두번째 매개변수 (int c) : 존재하는지 확인할 문자 (아스키값으로 들어감)


좀더 자세히 들어가보면
첫번재 매개변수 str 의 문자열에서 두번째 매개변수로 들어온 c가 존재하는지 검사하고, 문자가 존재하면 해당 문자가 존재하는 곳의 포인터를 반환하고,
존재하지 않으면 널포인터 반환합니다. 


▶ strchr 함수 사용 간단 예시

1
2
3
4
5
6
char str[] = "BlockDMask";
char* ptr = strchr(str, 'M'); //알파벳 M을 찾음
if(ptr != NULL)
{
    printf("%c, %d", *ptr, ptr);
}
cs


결과 값으로
*ptr : “M” 이 나옵니다.
ptr : “Mask” 가 나옵니다.

이렇게 strchr 함수를 통해서 원하는 문자가 문자열 안에 존재하는지 확인할 수 있습니다.

 

2. strchr 함수 사용 예제


▶ strchr 예제1 : 문자열에서 특정 문자가 한개 있는지 검사

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<string.h>
#include<stdio.h>
 
int main(void)
{
    char str[] = "BlockDMask";
    char* ptr = strchr(str, 'M'); //알파벳 M을 찾음 
    
    if(ptr != NULL
    {
        printf("찾는 문자 : %c\n"*ptr);
        printf("찾은 후 부터의 문자열 : %s", ptr); 
    }
 
    return 0;
}
cs


예제 결과

 


 문자열에서 특정 문자를 모두 검사

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<string.h>    //strchr
#include<stdio.h>    //printf
 
int main(void)
{
    char str[] = "BlockDMask Blog is good";
    char* ptr = strchr(str, 'o');
    
    while(ptr != NULL
    {
        printf("찾는 문자 : %c, 찾은 문자열 : %s\n"*ptr, ptr);
        ptr = strchr(ptr + 1'o');    //ptr + 1 이 중요합니다.
    }
    
    return 0;
}
cs


예제 결과


결과 화면에서 보듯이 문자열 내부에 존재하는 모든 ‘o’를 찾게 됩니다.

ptr = strchr(ptr + 1, ‘o’);

해당 문장에서 ptr + 1 통해서 포인터로 찾은 ‘o’ 다음의 위치에서 부터 다른 ‘o’를 찾게 되고 그거에 대한 결과값을 다시 ptr에 넣게 됩니다.
그림으로 한번 확인해 볼까요?

strchr가 '\0'를 만나면 null을 반환하게 됩니다.

 

▶ strchr 함수 특징을 이용해서 문자열 바꿔보기

strchr 는 문자열 끝을 인식하게 되는데요. C스타일의 문자열 char*, char[] 에서 문자열 끝을 가리키는 문자 ‘\0’ 아시죠?

이걸 이용해서 strchr 함수를 조금 놀려 보려고 합니다.
문자열 중간에 문자열의 끝을 알리는 ‘\0’ 문자을 넣어 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<string.h>    //strchr
#include<stdio.h>    //printf
 
int main(void)
{
    char str[] = "BlockDMask \0Blog is good";    // "\0"을 넣어봤습니다.
    char* ptr = strchr(str, 'o');
    
    while(ptr != NULL
    {
        printf("찾는 문자 : %c, 찾은 문자열 : %s\n"*ptr, ptr);
        ptr = strchr(ptr + 1'o');    //ptr + 1 이 중요합니다.
    }
    
    return 0;
}
cs


예제결과


결과 값을 확인해보면 첫번째 ‘o’를 찾은 후에 프로그램이 종료 된 것을 알 수 있습니다.
이는 strchr 함수가 문자열에서 첫번째 ‘o’를 찾고 포인터를 한칸 이동한 후에 그 다음 문자 ‘o’를 찾기 전에 문자열의 끝을 알리는 ‘\0’ 문자를 만나게 되어서 "아 문자열이 끝났구나 난 ‘o’를 찾지 못했어.. 난 쓰레기야"하며 NULL을 반환하게 됩니다.

오늘은 c언어, c++에서 문자열에서 문자가 있는지 없는지 찾아보는 strchr 함수에 대해서 알아보았습니다.
이해되지 않는 부분이 있다면 질문 달아주세요.
*여러분들의 무조건적인 비판은 작성자를 힘들게 합니다. 제가 작성한 글에 문제가 있다면 댓글 달아주면 수정하도록 하겠습니다. 감사합니다.

반응형