일상 메모장

strchr 사용법 및 구현 - C 문자열 처리 본문

C 언어

strchr 사용법 및 구현 - C 문자열 처리

핸드오버 2020. 1. 21. 10:02

사용법

#include <string.h>

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

char *strrchr(const char *s, int c);

정의

문자열에서 특정 문자를 찾을 때 사용하는 함수입니다.

strchr() 함수는 문자열 s에서 첫 번째로 찾은 문자 c의 포인터를 리턴합니다.

strrchr() 함수는 문자열 s에서 마지막으로 있는 문자 c의 포인터를 리턴합니다.

반환 값

strchr() 과 strrchr() 함수는 문자열에서 찾은 문자 위치의 포인터를 리턴합니다.

만약 찾이 못했다면 NULL을 리턴합니다.

 

strchr() 내부 구현 (strchr 실제 구현부)

/**
 * strchr - Find the first occurrence of a character in a string
 * @s: The string to be searched
 * @c: The character to search for
 */
char *strchr(const char *s, int c)
{
        /*
         * s 문자열의 처음 문자부터 c 문자와 같지 않으면
         * 루프를 계속 돕니다.
         * 같으면 루프를 종료하고 현재 s의 위치를 리턴합니다.
         */
        for (; *s != (char)c; ++s)
                if (*s == '\0')
                        return NULL;
        return (char *)s;
}

/**
 * strrchr - Find the last occurrence of a character in a string
 * @s: The string to be searched
 * @c: The character to search for
 */
char *strrchr(const char *s, int c)
{
        const char *last = NULL;
        /*
         * s 문자열을 순차적으로 돌면서 c와 같은 문자가 있으면 last에 기록합니다.
         * NULL이 아닐때까지 계속 돌아서 마지막 c와 같은 문자를 찾습니다.
         * 마지막으로 찾은 c와 같은 문자의 위치를 리턴합니다.
         */
        do {
                if (*s == (char)c)
                        last = s;
        } while (*s++);
        return (char *)last;
}

strchr() 함수는 s 문자열 처음부터 c와 같은 문자를 찾을 때까지 루프를 돕니다.

c와 같은 문자를 찾으면 현재 s 포인터의 위치를 리턴합니다.

 

strrchr() 함수는 s 문자열 처음부터 c와 같은 문자를 찾을때까지 루프를 돕니다.

c와 같은 문자를 찾으면 현재 s 포인터의 위치를 last 변수에 저장해놓고 계속 루프를 돕니다.

또 c 와 같은 문자를 찾으면 last에 입력합니다. s 문자열의 끝까지 루프를 다 돌았으면

마지막으로 찾은 c 문자의 위치(last)를 리턴합니다.

예제

#include <string.h>
#include <stdio.h>

int main()
{
	char dest[] = "abcdefgabcd";
    char *first;
    char *last;

	/* dest 문자열에서 첫번째 나오는 'b'문자를 찾습니다. */
	first = strchr(dest, 'b');

	/* dest 문자열에서 마지막 나오는 'b'문자를 찾습니다. */
	last = strrchr(dest, 'b');

	printf("first : %s, last : %s\n", first, last);
    
	return 0;
}

결과값은 first : bcdefgabcd, last : bcd 입니다.