문제설명

 

소스코드

#include<iostream>
#include <string>
using namespace std;
int main()
{
	string input; int count = 0;
	getline(cin, input);
	if (input.empty() || ((input[0] == ' ') && input.length() == 1)) 
	{
    	//문자열이 없거나 있어도 공백을 포함한 1글자라면 0을 출력한다.
		cout << 0;
		return 0;
	}
	int npos;
	npos = input.find_first_not_of(' ');
	input.erase(0, npos); //왼쪽 공백 제거
	npos = input.find_last_not_of(' ');
	input.erase(npos + 1); //오른쪽 공백 제거
	for (int i = 0; i < input.length(); ++i)
	{
		if (input[i] == ' ') ++count; //공백 카운트한다.
	}
	cout << ++count; //공백 +1이 단어의 개수이다.
}

 

풀이

  1. cin으로 문자열을 받지않고 getline()으로 받는다.
  2. 양쪽 공백 제거
  3. 문자 사이의 공백 수 +1이 단어의 개수이다.
  4. 문자열이 없거나 있어도 공백을 포함한 1글자라면 0을 출력한다.

왜 cin으로 받으면 안되는 것이고, getline()으로 받아야하는지 모르겠다. 나중에 알아봐야겠다.