C언어 header/string.h
strrstr(3) - 문자열의 뒤에서 부터 문자열 찾기(비표준)
자연&사람
2019. 9. 25. 23:00
반응형
strrstr(3)
#include <string.h>
char *strrstr(const char *haystack, const char *needle);
strrstr(3)함수는 haystack문자열의 뒤쪽에서 부터 needle문자열과 일치하는 부분의 시작 위치에 대한 문자열 pointer를 return합니다. 만약 needle의 값이 ""이라면 haystack의 시작 위치에 대한 pointer를 return합니다.
haystack 문자열에 needle문자열이 포함되어 있지 않으면 NULL을 return합니다.
※주의: 이 함수는 비표준함수로 일부 UNIX에서만 지원되며 LINUX에서는 지원하지 않습니다.
지원되지 않는 경우에는 아래에 구현된 소스를 참고하기 바랍니다.
파라미터
haystack
- needle문자열 포함되어 있는 지를 검색할 문자열
needle
- haystack문자열에서 찾을 문자열
RETURN
NULL 아님
- 문자열 haystack의 뒤쪽에서 부터 앞쪽으로 needle문자열을 찾았을 때, 처음 찾은 위치에 대한 문자열 pointer
NULL
- 문자열 haystack에 문자열 needle가 포함되어 있지 않습니다.
활용 예제
소스구현). 표준라이브러리에서 strrstr(3)을 지원하지 않는 경우
#include <string.h>
char *strrstr(const char *haystack, const char *needle)
{
int haystack_len;
int needle_len;
char *ptr;
haystack_len = strlen(haystack);
needle_len = strlen(needle);
if(needle_len == 0) {
return (char *)haystack;
}
if(needle_len > haystack_len) {
return NULL;
}
ptr = (char *)haystack + haystack_len - needle_len;
while(1) {
if(strncmp(ptr, needle, needle_len) == 0) {
return ptr;
}
if(ptr == haystack) {
break;
}
ptr--;
}
return NULL;
}
Sample
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
char *ptr;
if((ptr = strrstr("abcdefgabcdefgh", "bc")) == NULL) {
printf("ptr is null.");
} else {
printf("ptr = %s\n", ptr);
}
return 0;
}
결과:
ptr = bcdefg
반응형