[백준] 1152번. 단어의 개수

4644 단어 백준백준

https://www.acmicpc.net/problem/1152

공백을 포함해서 문자열 입력 받기

참고 자료: https://kyu9341.github.io/C-C/2020/01/17/C++getline()/

istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);

입력을 받다가 delimiter(구분자)를 만나면, 그 문자는 cin 버퍼에 저장되지 않은 채로 입력이 종료된다. 그리고 문자열 끝에 널문자('\0')가 붙는다.

문제 풀이

str::string도 c언어 스타일 문자열과의 호환성을 위해 문자열 끝에 널문자를 붙인다.
https://hashcode.co.kr/questions/5777

// 1152번. 단어의 개수
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string str;
	getline(cin, str);

	int cnt = 0;
	int n = str.length();

	// i=0     i=1
	// 공백    영문자
	// 영문자  공백
	// 영문자  영문자

	// 공백 공백 이렇게 연속될 수 없는 상황에서 
	// "공백이 나왔다"는 것은 첫번째 원소를 제외하고는 
	// "바로 앞에 영문자가 있었다"는 거니까 단어 개수 증가시키기!
	// 영문자를 만날 때 카운트를 증가시키면 단어 개수보다 많아지니까
	// 공백을 기준으로 카운트를 증가시킨다.

	for (int i = 1; i < n; i++) {
		// 다시 공백이 나오면 cnt++ 
		if (str[i] == ' ') {
			cnt++;
		}
	}

	// 마지막이 영문자로 끝나면 cnt++ (공백으로 끝난 경우 이미 cnt++한 상태)
	if (str[n - 1] != ' ') 
		cnt++;

	cout << cnt;

	return 0;
}

좋은 웹페이지 즐겨찾기