반응형

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

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,