#51. 백준 1152번 문제 풀이: 단어의 개수 문제 원본 보기
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에 있는 단어의 갯수를 출력하시오. 같은 단어라도 카운트 한다. 입력: 1,000,000 자 이내의 문자열, 단어는 공백으로 구분된다. 공백 문자로 시작되거나 끝날 수도 있다. 출력: 단어 개수
입력/출력
--입력--
The Curious Case of Benjamin Button
--출력--
6
--입력--
 The first character is a blank
--출력--
6
--입력--
The last character is a blank 
--출력--
6
문제풀이+해설
문자열에서 단어는 공백문자로 구분되기 때문에 공백문자의 개수에 +1을 해주면 단어개수가 된다.
주의 할 것은 첫글자와 마지막 글자의 공백은 무시해야 한다.
처음과 마지막 공백은 언어에 따라 trim 함수가 지원되지만 여기서는 루프를 돌려서 직접 처리하도록 구현하겠다.

이문제의 핵심사항 중 하나는 공백문자를 포함한 문자열을 입력받는 방법이다.
C의 scanf() 나 C++ std::cin  은 기본적으로 공백이나 엔터키 까지 끊어서 입력 받는다.

소스에 공백포함해서 입력받는 설명을 해두었으니 참고바람.
문자열을 입력받을 때 scanf 는 기본적으로 공백이나 엔터키까지 끊어서 받는다. 그래서 공백문자를 포함해서 문자열을 받으려면 아래와 같이 사용한다. scanf("%[^\n]s", s); scanf 에 %[^\n] 포맷을 해 주면 엔터키 전까지 공백 포함해서 문자열을 받을 수 있다.
code sol.
#include <stdio.h>
#include <string.h>

int main() {
  int i, l, count = 0;
  char s[1000001];
  
  scanf("%[^\n]s", s); // scanf 에 %[^\n] 포맷을 해 주면 엔터키 전까지 공백 포함해서 문자열을 받을 수 있다.
  l = strlen(s);
  count = 0; // 단어갯수 카운트
  for(i = 0; i < l; i++) { 
    if(s[i] == ' ') count++; // 공백문자라면 단어갯수 카운트 증가
  }
  if(s[0] == ' ') count--; // 첫글자가 공백이면 카운트 감소
  if(s[l-1] == ' ') count--; // 마지막 글자가 공백이면 카운트 감소

  printf("%d", count + 1); // 단어개수 출력: 공백수 +1 
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.