while문 문자열 비교 조건검사

조회수 1701회
int main(void)
{

    char* str[7] = { "tiger", "applemango", "pear", "anteater", "strawberry", "eagle", "end" };

    char* st = malloc(sizeof(char)*4);

    while (*st != "end")
    {
        printf("검색 단어(종료는 end) : ");
        scanf("%s", st);

        for (int i = 0; i < 7; i++)
        {
            if (strcmp(str[i], st) == 0)
            {
                printf("%d번째 같은 단어가 있습니다!\n", i+1);
                break;
            }
        }
        printf("\n");       
    }
    free(st);
    return 0;
}

while문 조건으로 *st != "end"으로 썼는데 *stend로 초기화해도 빠져나가지 않습니다.

while(1)로 하고 그 안에 if문 *st != "end"조건으로 break;로 하면 빠져나가지는데 잘 모르겠습니다.

1 답변

  • C에서는 문자열을 단순히 == 나 != 와 같은 방식으로 비교할 수 없습니다. C++를 이용하는 경우에는 다를 수 있지만, character array간의 비교는 그렇게 할 수 없습니다. 저 식은 둘의 내용을 보는 게 아니라 둘이 저장된 주소를 비교하는 것이기 때문입니다.

    또한 이것은 여담입니다만, st에 입력을 받으시는 것으로 보이는데 st가 받은 메모리 용량이 너무 작습니다. str 배열에 보이는 문자열들 중에 이보다도 훨씬 큰 것들도 보이는데 이러면 의도하시는 대로 동작이 안 될 수 있습니다. 되더라도, 다른 프로그램의 메모리에 문제를 일으킬 수 있습니다.

    그래서

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        char* str[7] = { "tiger", "applemango", "pear", "anteater", "strawberry", "eagle", "end" };
    
        char* st = (char*) calloc(255, sizeof(char));
    
        while (strcmp(st, "end"))
        {
            printf("검색 단어(종료는 end) : ");
            scanf("%s", st);
    
            for (int i = 0; i < 7; i++)
            {
                if (strcmp(str[i], st) == 0)
                {
                    printf("%d번째 같은 단어가 있습니다!\n", i + 1);
                    break;
                }
            }
            printf("\n");
        }
        free(st);
        return 0;
    }
    

    제 임의로 조정한 부분들이 있음은 양해해 주시기 바랍니다.

    우선 아까도 얘기했지만 문자열의 동일여부는 C에서는 strcmp를 이용합니다. strcmp의 return 값이 0이면 같은 것이므로 end를 받고 빠져나갑니다. 다만 이렇게 동작할 경우 'end'가 입력되어도 내부에서 printf가 한 번 더 작동하고 종료됩니다. 이 부분은 알고리즘의 문제라고 할 수 있습니다.

    *st는 character로서 보면 st 문자열의 첫 글자를 의미하는데, 이렇게 보더라도 비교대상은 "end"라는 문자열이므로 비교가 불가능합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)