44 문자열 검색하기
이번에는 문자열에서 문자와 문자열로 검색하는 방법을 알아보겠습니다. 참고로 문자열 검색은 포인터를 이용하는 방식이라 내용이 어려울 수 있습니다.
44.1 문자열 안에서 문자로 검색하기
먼저 문자열에서 특정 문자로 검색하는 방법입니다. strchr 함수를 사용하면 문자열에서 특정 문자로 검색할 수 있으며 함수 이름은 string character에서 따왔습니다(string.h 헤더 파일에 선언되어 있습니다).
- strchr(대상문자열, 검색할문자);
- char *strchr(char * const _String, int const _Ch);
- 문자를 찾았으면 문자로 시작하는 문자열의 포인터를 반환, 문자가 없으면 NULL을 반환
다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.
string_find_character.c
#include <stdio.h> #include <string.h> // strchr 함수가 선언된 헤더 파일 int main() { char s1[30] = "A Garden Diary"; // 크기가 30인 char형 배열을 선언하고 문자열 할당 char *ptr = strchr(s1, 'a'); // 'a'로 시작하는 문자열 검색, 포인터 반환 while (ptr != NULL) // 검색된 문자열이 없을 때까지 반복 { printf("%s\n", ptr); // 검색된 문자열 출력 ptr = strchr(ptr + 1, 'a'); // 포인터에 1을 더하여 a 다음부터 검색 } return 0; }
실행 결과
arden Diary ary
strchr 함수에 문자열과 검색할 문자를 넣어주면 해당 문자로 시작하는 문자열의 위치(포인터)를 반환합니다.
char *ptr = strchr(s1, 'a'); // 'a'로 시작하는 문자열 검색, 포인터 반환
문자열 안에 'a'로 시작하는 부분을 더 찾으려면 while 반복문을 사용하여 검색된 문자열의 포인터를 strchr 함수에 계속 넣어서 반복합니다. NULL이 나오면 더 이상 검색된 문자열이 없으므로 반복을 끝냅니다.
while (ptr != NULL) // 검색된 문자열이 없을 때까지 반복 { printf("%s\n", ptr); // 검색된 문자열 출력 ptr = strchr(ptr + 1, 'a'); // 포인터에 1을 더하여 a 다음부터 검색 }
이제 strchr 함수의 동작 순서입니다. 먼저 char *ptr = strchr(s1, 'a');와 같이 처음 함수를 실행하여 "arden Diary"를 찾습니다. 그리고 while로 반복하면서 앞에서 결과로 나온 ptr에 1을 더하여 다시 넣어줍니다.
ptr = strchr(ptr + 1, 'a'); // 포인터에 1을 더하여 a 다음부터 검색
ptr을 그대로 넣어주면 "arden Diary"가 들어가서 맨 처음에 있는 'a'를 다시 찾게 되므로 계속 "arden Diary"가 나옵니다. 따라서 포인터 연산으로 ptr에 1을 더해주면 "rden Diary"가 되므로 다음번 'a'를 찾을 수 있게 됩니다(포인터 연산은 'Unit 44 포인터 연산 사용하기'에서 자세히 설명하겠습니다).
여기서 "A Garden Diary"의 첫 글자가 A인데 그냥 넘어갔습니다. 왜냐하면 strchr 함수는 대소문자를 구분하므로 검색할 문자를 'a'로 지정하면 'A'는 찾지 않고 넘어갑니다.
다시 while로 반복하면서 'a'를 찾다가 문자열의 끝에서 NULL을 만나면 NULL을 반환한 뒤 반복문을 끝냅니다.