문제 URL:
1152번: 단어의 개수
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한
www.acmicpc.net
다음 문제는 영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진 상태에서
이 문자열에 단어가 몇 개 있을지 구하는 프로그램으로
stringstream 객체를 이용하여 문제를 풀었다.
먼저 getline() 함수로 띄어쓰기를 포함한 문자열을 입력 받고,
stringstream 객체를 통해 띄어쓰기를 기준으로 단어들을 분리하여 string 객체인 word에 단어들을 저장해주었다.
이 과정이 반복적으로 이루어져야하기 때문에 반복문의 조건으로 ss >> word를 적어주어
데이터 읽기를 실패할 때까지 위 과정을 반복했다.
또한, 출력 결과가 단어의 개수이기 때문에 한 번 반복문을 실행할 때마다 count변수의 값을 증가시켜
단어의 개수를 세어주고 마지막으로 count변수를 출력하여 원하는 결과를 얻었다.
+) 이 문제를 처음 풀 때 몇 가지 실수가 있었다.
첫 번째는 공백을 포함해서 문자열을 입력받을 수 있는 getline()함수 대신에 cin으로 작성하는 오류가 있었고,
두 번째로는 while 반복문 안의 조건을 !eof()로 작성하여 파일의 끝이 아니면 참을 반환하였는데,
이렇게 코드를 작성하면 마지막에 공백 문자가 있을 때 원하는 결과보다 반복문이 한 번 더 돌아가는 오류가 있었다.
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
string s, word;
int count=0;
getline(cin, s);
stringstream ss;
ss << s;
while(ss >> word)
count++;
cout << count;
}