본문 바로가기

TEST/자료구조와 함께 배우는 알고리즘 입문(C언어)

<8> Q8. 자료구조와 함께 배우는 알고리즘 입문 (C언어)

#include <stdio.h>
#include <string.h>
int str_cmpic(const char *s1, const char *s2)
{
    while ((*s1 == *s2) || ((*s1 + 32 == *s2) || *s1 == *s2 + 32))
    {
        if (*s1 == '\0')
            return 0;
        s1++;
        s2++;
    }
    return (unsigned char)*s1-(unsigned char)*s2;
}

int str_ncmpic(const char *s1, const char *s2, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        if ((s1[i] != s2[i]) && ((s1[i] + 32 != s2[i]) && (s1[i] != s2[i] + 32)))
        {
            return s1[i] - s2[i];
        }
    }
    return 0;
}

int main(void)
{
    char st1[128];
    puts("\"ABCD\"와 비교합니다.");
    puts("\"XXXX\"면 종료합니다.");
    while (1)
    {
        printf("문자열 st : ");
        scanf("%s", st1);
        if (str_cmpic("XXXX", st1) == 0)
            break;
        printf("str_cmpic(\"str_cmpic(\"ABCD\",st1) = %d\n", str_cmpic("ABCD", st1));
    }

    char st2[128];
    puts("\"STRING\"의 처음 3개의 문자와 비교합니다.");
    puts("\"XXXX\"를 입력하면 종료합니다.");
    while (1)
    {
        printf("문자열 st : ");
        scanf("%s", st2);
        if (str_ncmpic("XXXX", st2, 3) == 0)
            break;
        printf("str_ncmpic(\"STRING\",st,3) = %d\n", str_ncmpic("STRING", st2, 3));
    }

    return 0;
}