* ft_strrchr() 함수는 파라미터로 주어진 문자열과 문자 c를 이용한다.
문자열의 뒤에서부터 c를 탐색해 c를 발견하면 c를 찾은 문자열의 주소를 반환하고, 찾지 못하면 NULL을 반환한다.
char *ft_strrchr(const char *s, int c)
const char *s : 문자 c를 검색할 문자열 s
int c : 문자열에서 검색할 문자. 정수로 인자를 받고 아스키 코드상 문자로 쓰인다.
검색할 문자 c는 int로 주어지기 때문에 unsigned char
로 형변환하여 검색한다.
--> char로 형변환하지 않는 이유는, 특정 아키텍쳐 cpu를 사용하는 환경에서는 unsigned char
가 디폴트이다.
이러한 환경에서 char을 사용했을 때 unsigned char로 바뀌어 적용된다.
이렇듯 char을 이용했을 때 환경마다 다르게 동작
할 수 있기 때문에 관례상 unsigned char을 이용한다.
검색할 문자 c가 '\0'일 때는 s[index]가 '\0'일 때도 검색해야 함에 주의한다.
뒤에서부터 검색을 하지만, 앞에서부터 찾아나가 갱신하는 과정으로 구현해도 된다.
#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);
}
(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를 반환한다.