[백준 c++] 1152번: 단어의 개수

kaswhy·2023년 6월 21일
0

백준 공부하기

목록 보기
1/2

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

문제: 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력: 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

출력: 첫째 줄에 단어의 개수를 출력한다.

getline()과 istringstream으로 문자열 분리하기

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

int main() {
	// 문자열 입력
	string s;
	getline(cin, s);


	// 단어 넣을 벡터 생성, 구분자 정하기, s를 string -> istringstream
	vector<string> v;
	char separator = ' ';
	istringstream iss(s);
	string str;

	// getline 통해 구분자를 기준으로 문자열 읽어서 str에 저장 -> 벡터에 삽입
	while (getline(iss, str, separator)) {
		// 첫 번째 char가 ' '인 경우 생략
		if (str == "") {
			continue;
		}
		v.push_back(str);
	}

	// 벡터 사이즈는 단어의 개수
	cout << v.size() << endl;
}

먼저, 입력 받을 때 공백을 string에 포함해야 하므로 getline을 통해 입력받는다.

이후, string을 istringstream ( sstream include)으로 변환한 후, seperator (' ')로 구분하여 단어를 잘라 v라는 벡터에 넣어준다.

만약, ' ' 을 이용하여 자른 단어가 "" 이면 넘긴다. (아무것도 안 들어갔다면)

-> 그러면 벡터의 사이즈가 단어의 개수가 된다!

0개의 댓글