ft_strrchr 구현

yeonjkim·2021년 5월 24일
0

42seoul-libft

목록 보기
31/43

1. ft_strrchr 용도

* ft_strrchr() 함수는 파라미터로 주어진 문자열과 문자 c를 이용한다.
문자열의 뒤에서부터 c를 탐색해 c를 발견하면 c를 찾은 문자열의 주소를 반환하고, 찾지 못하면 NULL을 반환한다.

2. ft_strrchr 프로토타입

char	*ft_strrchr(const char *s, int c)
const char *s : 문자 c를 검색할 문자열 s
int c : 문자열에서 검색할 문자. 정수로 인자를 받고 아스키 코드상 문자로 쓰인다.

3. 구현 시 유의사항

  • 검색할 문자 c는 int로 주어지기 때문에 unsigned char로 형변환하여 검색한다.
    --> char로 형변환하지 않는 이유는, 특정 아키텍쳐 cpu를 사용하는 환경에서는 unsigned char가 디폴트이다.
    이러한 환경에서 char을 사용했을 때 unsigned char로 바뀌어 적용된다.
    이렇듯 char을 이용했을 때 환경마다 다르게 동작할 수 있기 때문에 관례상 unsigned char을 이용한다.

  • 검색할 문자 c가 '\0'일 때는 s[index]가 '\0'일 때도 검색해야 함에 주의한다.

  • 뒤에서부터 검색을 하지만, 앞에서부터 찾아나가 갱신하는 과정으로 구현해도 된다.

4. 코드 구현

#include "libft.h"

char            *ft_strrchr(const char *s, int c)
{
        size_t  index;
        char    *res;

        index = 0;
        res = NULL;
        while (s[index] != '\0')
        {
                if (s[index] == (unsigned char)c)
                {
                        res = (char*)&s[index];
                }
                index++;
        }
        if ((unsigned char)c == 0)
        {
                res = (char*)&s[ft_strlen(s)];
        }
        return (res);
}

5. 코드 구현 방법

(1) s[index]가 '\0'이 아닐 때까지 s[index]가 c인지 검색한다.
(2) s[index] == (unsigned char)(c)라면 char형 포인터 res에 s[index]의 주소를 저장한다.
(3) 만약 c가 0이라면 res에 s[ft_strlen(s)]의 주소를 저장한다.
(4) res를 반환한다.

0개의 댓글