안녕하세요. 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 함수에 대해서 알아보았습니다.
이해되지 않는 부분이 있다면 질문 달아주세요.
*여러분들의 무조건적인 비판은 작성자를 힘들게 합니다. 제가 작성한 글에 문제가 있다면 댓글 달아주면 수정하도록 하겠습니다. 감사합니다.
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] fputc, fgetc 함수에 대해서 (0) | 2020.06.16 |
---|---|
[C언어/C++] 파일 입출력 fopen, fclose 함수에 대해서 (1) | 2020.06.12 |
[C언어/C++] strtok 함수(문자열 자르기)에 대해서. (14) | 2020.03.31 |
[C언어/C++] strcmp, strncmp 함수(문자열 비교)에 대해서 (13) | 2020.01.02 |
[C언어/C++] strlen 함수(문자열 길이)에 대해서 (1) | 2019.12.06 |
[C언어/C++] isdigit (숫자를 판단하는 함수) (2) | 2019.11.12 |
[C언어/C++] strstr 문자열 탐색 함수에 대해서 (3) | 2019.06.04 |
[C언어/C++] strcat, strncat 문자열 연결 함수에 대해서 (5) | 2019.05.24 |