본문 바로가기

언어/C언어 - 300제

060 - 문자열을 비교하는 함수 만들기

책과 다르게 코딩 해봄..
아래의 코드는 입력 받은 문자열과 비교 문자열이 모두 NULL 문자를 가질때까지 비교하므로
책의 소스보다 처리 속도면에서 떨어짐

참고 : scanf()는 공백문자를 입력 하지 못하므로 한단어만 비교 가능!!!
=================================================
#include <stdio.h>
#include <string.h>

#define SKY "sky"

int My_strcmp(const char*, const char*);

int main(void)
{
        char string[100];
        int ret;

        printf("영단어를 입력한 후 Enter키를 치세요\n");
        printf("sky를 입력하면 프로그램이 종료됩니다.\n");

        do{
                scanf("%s",string);

                ret = My_strcmp(string,SKY);

                if(ret == 0){
                        printf("%s == %s, ret = %d\n", string,SKY,ret);
                        break;
                }else if(ret < 0){
                        printf("%s < %s, ret = %d\n", string,SKY,ret);
                }else{
                        printf("%s > %s, ret = %d\n", string,SKY,ret);
                }
        }while(1);

        return 0;
}

int My_strcmp(const char* string1, const char* string2)
{

        if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;
       
        do{
                if(*string1 < *string2){
                        return -1;
                }else if(*string1 > *string2){
                        return 1;
                }

                string1++;
                string2++;
        }while(!(*string1 == '\0' && *string2 == '\0'));

        return 0;
=================================================

책에 나와 있는 소스
=================================================
#include <stdio.h>
#include <string.h>

#define SKY "sky"

int My_strcmp(const char*, const char*);

int main(void)
{
        char string[100];
        int ret;

        printf("영단어를 입력한 후 Enter키를 치세요\n");
        printf("sky를 입력하면 프로그램이 종료됩니다.\n");

        do{
                scanf("%s",string);

                ret = My_strcmp(string,SKY);

                if(ret == 0){
                        printf("%s == %s, ret = %d\n", string,SKY,ret);
                        break;
                }else if(ret < 0){
                        printf("%s < %s, ret = %d\n", string,SKY,ret);
                }else{
                        printf("%s > %s, ret = %d\n", string,SKY,ret);
                }
        }while(1);

        return 0;
}

int My_strcmp(const char* string1, const char* string2)
{

        if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;

        while(*string1 != (int)NULL){
                if(*string2 == (int)NULL){
                        return 1;       // string1 문자가 string2보다 더 길다
                }

                if(*string1 == *string2){
                        // *string1의 문자와 *string2의 문자가 같으므로 다음문자 비교
                        string1++;
                        string2++;
                        continue;       // 반복문의 조건문으로 이동
                }

                if(*string1 < *string2) return -1;
                else return 1;
        }

        if(*string2 != (int)NULL)       return -1;

        return 0;
}
=================================================