본문 바로가기

Beakjoon/else

[백준] 1152번 단어의 개수 (C++)

문제

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

 

1152번: 단어의 개수

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

www.acmicpc.net

코드

#include <iostream>
#include <string>

using namespace std;

int main(){
  string s;
  getline(cin, s);
  int length = s.length(); 
  int num = 0;
  
  if(length == 0 || (length == 1 && s[0] == ' ')){
    cout << 0 << endl;
  }
  else{
    for(int i=0; i < length; i++){
      if(s[i] == ' '){
        num += 1;
      }
    }
    if(s[0] == ' '){
      num -=1;
    }
    if(s[length-1] == ' '){
      num -= 1;
    }
    cout << num+1 << endl;
  }
  return 0;   
}

정리

getline()함수는 istream라이브러리와 string라이브러리에 각각 존재한다.

istream 라이브러리에 있는 getline() 함수는 뒤에 '\0'으로 끝나는 char* 형식을 따르는 클래식한 C언어 문자열을 따르는입력방법이고 string 라이브러리에 있는 getline()함수는 뒤에 '\0'으로 끝나지 않는 string 형식을 따르는 입력방법이다.

 

c++로 알고리즘 문제를 풀 때는 주로 string에 있는 getline()을 사용하는 것 같다. 

이 문제 역시 string 라이브러리에 있는 getline()함수를 사용했다.

 

getline()은 string 문자열을 입력 받을 수 있는 함수이다.

공백을 포함한 입력을 받을 때 자주 사용된다.

참조

https://jhnyang.tistory.com/107

'Beakjoon > else' 카테고리의 다른 글

[백준] 1181번 단어정렬 (C++) - sort, compare  (0) 2022.01.02
[백준] 10951번 A+B - 4 (C++)  (0) 2021.12.29
[백준] 2741번 N 찍기 (C++)  (0) 2021.12.29
[백준] 2577번 숫자의 개수 (C++)  (0) 2021.12.29
[백준] 1008번 A/B (C++)  (0) 2021.12.28