문제).
배열과 포인터를 활용을 위하여 strcmp(3)함수의 prototype과 기능을 확인한 후 포인터와 배열로 각각 구현하시오.

 

strcmp(3)함수의 spec은

 

strcmp(3) - 문자열 끝까지 비교

strcmp(3) #include int strcmp(const char *s1, const char *s2); s1, s2 두 문자열의 내용을 1바이트씩 unsigned char로 크고 작음을 비교합니다. 두 문자열이 1바이트 씩 비교하면서 다른 값을 만..

www.it-note.kr

이며, strcmp(3)함수의 spec상으로는 문자열이 같으면 0, 앞의 문자열이 정렬시 앞쪽이면 음수, 그렇지 않으면 양수이지만 대부분의 시스템에서 -1, 0, 1을 return하므로 이에 맞춰 구현을 하시오.

 


 

포인터로 구현한 함수는

int strcmp_ptr(const char *s1, const char *s2);의 이름으로 구현하고,

배열로 구현한 함수는

int strcmp_arr(const char *s1, const char *s2);의 이름으로 구현하시오.

 


답은 아래에... ↓

 

 

 

 


 

 

 

 

스스로 풀어보시고... ↓

 

 

 

 

 


 

 

 

아래 답과 비교해보세요. ↓

 

 

 

 

 


포인터로 구현하기)

int strcmp_ptr(const char *s1, const char *s2)
{
    int cmp;
    while(*s1 && *s1 == *s2) {
        s1++;
        s2++;
    }
    cmp = (unsigned char)*s1 - (unsigned char)*s2;
    return cmp > 0 ? 1 : cmp < 0 ? -1 : 0;
}

 

배열로 구현하기)

int strcmp_arr(const char *s1, const char *s2)
{
    int i, cmp;
    
    for(i = 0; s1[i] && s1[i] == s2[i]; i++) ;
    
    cmp = (unsigned char)s1[i] - (unsigned char)s2[i];
    return cmp > 0 ? 1 : cmp < 0 ? -1 : 0;
}
블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag ,

댓글을 달아 주세요