인프런 커뮤니티 질문&답변

swo98님의 프로필 이미지
swo98

작성한 질문수

홍정모의 따라하며 배우는 C언어

7.8 단어 세기 예제

word count를 공백을 제외하는 문제라면?

작성

·

161

0

#include <stdio.h>
#include <ctype.h>

int main()
{
    char ch;
    int n_chars = 0;
    while((ch=getchar())!= '\n'){
        if(isspace(ch)){
            n_chars++;
        }
    }
    printf("%d",n_chars);
    
    return 0;
}

단어 개수를 공백도 단어라고 본다면 저렇게 쉽게 풀리는데,

만약 문제가 공백은 단어로 취급하지 않는다면

getchar()로 입력받아서는 풀이가 불가능한가요?

입력이 문장의 첫 번쨰 혹은 마지막이 공백이라면 예상한 개수보다 +1이 더 나오게되는 문제가 있습니다. 

이런 문제의 경우 입력의 첫 혹은 마지막 문자가 공백일 경우를 따로 세어주는 해법을 생각해봤는데, 그러기 위해서는 일단 입력자체를 문자열로 받은다음에, 인덱스로 접근해서 각각 분기해줘야 하는것 아닌가, 그렇다면 getchar()로는 풀 수 없는 것 아닌가? 이런 생각이 드네요

getchar()를 활용한 소스가 검색으로는 도저히 안나와서... 질문올려봅니다. 

 

요약: 공백을 제외한 단어만을 카운트해준다면 getchar()로 입력받아서는 안되고, 반드시 문자열로 입력을 받는 수밖에 없다?입니다 감사합니다..

답변 1

0

안녕하세요 답변이 늦어 죄송합니다

음.. 질문이 잘 이해가 안돼요 ㅠㅠ "단어 개수를 공백도 단어라고 본다면 저렇게 쉽게 풀리는데," 라고 말씀해주셨는데 저 코드가 공백도 단어라고 보는 코드는 아니라고 생각하거든요! (제가 잘못 이해한거라면 말씀해주세요) isspace 가 true 인 공백이 나타나면 이전까지 나왔던 일련의 문자들은 하나의 단어라고 보고 (즉, 공백으로 단어들을 구분한다고 보고) 카운트를 하나 증가시키는 코드이기 때문입니다. 공백을 단어라고 보는 것이 아닌 단어를 구분하는 기준으로 보는거죠. 그리고 해당 코드는 사실 단어 개수를 세는 코드라기보단 "공백의 개수를 세는 코드"에 가깝다고 보여집니다. (hi hello world 라고 입력한다면 3이 나와야 단어 세는 코드라고 할 수 있는데 공백 개수와 일치한 2가 나옵니다) 

그리고 공백을 제외한 단어 카운트 코드는 바로 이 강의에서 나옵니다..! 이 강의에서 배워요.. 강의 코드를 분석해보시고 공부해보시면 될 것 같아요. 

그리고 getchar() 와 질문 주신 부분과는 관련 없습니다! 강의에서도 getchar 사용합니다

 

swo98님의 프로필 이미지
swo98

작성한 질문수

질문하기