c언어 strtok을 이용한 공백제거 문제

조회수 292회

문자열을 입력받아서 모든 공백문자를 삭제하는 함수를 strtok을 이용하여 만들고 싶은데 바로 종료가 됩니다.

입력: "ab cd ef"

원하는 출력: "abcdef"

실제 출력: "ab"

strtok을 써서 풀고 싶은데 어떻게 수정해야 하나요?

#include <stdio.h>
#include <string.h>

void Split(char *arr);
int main(void)
{
    char a[20];

    printf("문자열 입력");
    scanf("%s", a);
    Split(a);

    return 0;
}

void Split(char *arr)
{
    char *tk;
    tk = strtok(arr, " ");

    while(tk != NULL)
    {
        printf("%s", tk);
        tk = strtok(NULL, " ");
    }
}

1 답변

  • scanf 함수는 공백 문자가 들어오면, 입력이 종료되기 때문에 생기는 문제인 것 같습니다.

    scanf를 gets_s() 함수로 바꾸어 실행하니 질문자님이 원하는 결과가 나오네요 :)

    #include <stdio.h>
    #include <string.h>
    
    void Split(char *arr);
    int main(void)
    {
        char a[20];
    
        printf("문자열 입력");
        gets_s(a); // scanf 함수를 gets_s 함수로 변경
        Split(a);
    
        return 0;
    }
    
    void Split(char *arr)
    {
        char *tk;
        tk = strtok(arr, " ");
        while (tk != NULL)
        {
            printf("%s", tk);
            tk = strtok(NULL, " ");
        }
    }
    
    

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.