영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
첫째 줄에 단어의 개수를 출력한다.
중요한 점은 공백에 대한 조건이다.
공백이 앞뒤에 존재하는 경우, 모두 공백인 경우를 생각할 수 있는지가 포인트이다.
단순한 '여부'일 때에는 boolean을 이용하는 것이 유리하다.
ㄱ. word여부를 false로 초기화 : bool isWord = false
ㄴ. 문자열의 모든 char를 순회하면서 isWord를
' '이 아닐때만 true로 바꾼다.
' '인 경우에는 false로 설정한다.
true이면서 isWord가 참일 때에만 한번 count를 올린다.(참이 처음 되는 그 경우만 세게 됨 즉, ' '이 아닌 모든 경우에 count가 올라가지 않음)
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
getline(cin, str);
// 1. 모든 문자가 공백인 경우에 대한 처리
bool allSpaces = true;
for (char ch : str) {
if (ch != ' ') {
allSpaces = false;
break;
}
}
if (allSpaces) {
cout << 0;
return 0;
}
//2. 일반적인 경우에 대한 처리
int count = 0;
bool inWord = false;
for (char ch : str) {
if (ch != ' ') {
if (!inWord) {
inWord = true;
count++;
}
} else {
inWord = false;
}
}
cout << count;
return 0;
}