strchr, strrchr 함수로 문자열에서 문자 찾기
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이 됩니다.
퀴즈
strchr함수는 어떤 함수인가요?strrchr함수는 무엇을 검색하는 함수인가요?strchr함수와strrchr함수는 어떤 차이점이 있나요?strchr함수와strrchr함수가 실패할 경우 각각 어떤 값을 반환하나요?- 다음 코드의 실행 결과는 무엇인가요?
코드: 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;
}
정답:
- 특정 문자를 찾아 그 위치를 반환하는 함수입니다.
- 특정 문자를 역순으로 찾아 그 위치를 반환하는 함수입니다.
strchr함수는 문자열에서 처음 발견된 문자를 찾아 반환하지만,strrchr함수는 문자열에서 마지막으로 발견된 문자를 찾아 반환합니다.- 실패할 경우, 두 함수 모두
NULL을 반환합니다. ange,age
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!