#include<stdio.h>#include<string.h> // strchr 함수가 선언된 헤더 파일intmain(){chars1[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' 다음부터 검색}return0;}// 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'를 찾을 수 있게 된다.
여기서 "A Garden Diary"의 첫 글자가 'A'인데 그냥 넘어갔다.
왜냐하면 strchr 함수는 대소문자를 구분하므로 검색할 문자를 'a'로 지정하면 'A'는 찾지 않고 넘어간다.
다시 while로 반복하면서 'a'를 찾다가 문자열의 끝에서 NULL을 만나면 NULL을 반환한 뒤 반복문을 끝낸다.
4. 문자열의 오른쪽 끝부터 문자로 검색하기
strchr 함수는 문자열의 처음부터 문자를 검색해서 반환한다.
하지만 string.h 헤더 파일에 선언되어 있는 strrchr 함수를 사용하면 문자열의 끝에서부터 문자를 검색할 수 있다.
문자열에서 문자 찾기(strchr)와 문자열 찾기(strstr) 중에서 문자열 찾기 함수를 더 자주 쓴다.
#include<stdio.h>#include<string.h> // strstr 함수가 선언된 헤더 파일intmain(){chars1[30]="A Garden Diary";// 크기가 30인 char 타입 배열을 선언하고 문자열 할당char*ptr=strstr(s1,"den");// "den"으로 시작하는 문자열 검색, 포인터 반환printf("%s\n",ptr);return0;}// den Diary
char *ptr = strstr(s1, "den");과 같이 strstr 함수에 문자열과 검색할 문자열을 넣어주면 해당 문자열로 시작하는 문자열의 위치(포인터)를 반환한다.
여기서는 "A Garden Diary"에서 "den"으로 시작하는 문자열을 찾으므로 "den Diary"가 나온다.
즉, 검색한 문자 "den"만 나오지 않고 NULL이 나오기 전까지 뒤에 오는 모든 문자열이 나온다.
strstr 함수도 대소문자를 구분한다.
strchr 함수처럼 strstr 함수도 while 반복문을 사용하여 문자열을 계속 검색할 수 있다.
chars1[100]="A Garden Diary A Garden Diary A Garden Diary";char*ptr=strstr(s1,"den");// "den"으로 시작하는 문자열 검색, 포인터 반환while(ptr!=NULL)// 검색된 문자열이 없을 때까지 반복{printf("%s\n",ptr);// 검색된 문자열 출력ptr=strstr(ptr+1,"den");// "den" 포인터에 1을 더하여 'e'부터 검색}// den Diary A Garden Diary A Garden Diary// den Diary A Garden Diary// den Diary