[백준] 1152: 단어의 개수

2022. 5. 30. 18:58TIL💡/Algorithms

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

 

1152번: 단어의 개수

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

www.acmicpc.net

문자열 조작은 항상 어려워서 브론즈 문제임에도 제대로 시도해보았다.

 

cin.getline vs. <string> 헤더의 getline

📌 cin.getline(char 배열, 최대 입력 사이즈)

cin의 멤버 함수이다.

char 배열에 스트림 사이즈만큼 마지막 글자에 NULL 문자가 포함된 한 줄의 문자 배열을 입력받는다.

 

📌 <string> 헤더의 getline(입력 스트림, string 객체, 구분자)

지정한 구분자(delimiter)을 만날 때까지 문자열을 입력받아 string 객체에 저장한다.

구분자의 디폴트 값은 '\n'이다.

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
    int answer = 0;
    istringstream iss;
    char buffer[1000000];
    
    cin.getline(buffer, 1000000);
    iss.str(buffer);
    string str;
    iss.seekg(0);
    while(getline(iss, str, ' ')) {
        // 공백을 입력받는 경우
        if(str.length() == 0) {
            continue;
        }
        answer++;
    }
    cout << answer << endl;
}

여기서 헷갈렸던 점 하나가 있는데 공백을 입력받으면 문자열의 길이가 공백문자로 1일 줄 알았는데 알고보니 길이가 0이었다.