문제 : https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
문제 풀이 핵심
cin 은 공백 이전의 입력값 까지만 받는다.
=> 공백이 포함된 문자열을 입력 받을 수 있는 방법을 아는가?
=> string 헤더파일에 들어있는 getline 함수를 알고있고 사용할 수 있는가!
getline 함수 기본 속성
개행 문자 (엔터)가 나올 때 까지 입력을 받는다.
공백이 포함된 문자열을 하나의 변수에 저장할 수 있다.
(= 입력을 받고 '\n' 을 버퍼에서 삭제해서 띄어쓰기('\n')로 나누어진 단어 등을 한번에 저장할 수있다.)
getline 함수 사용법
1. cin.getline()
char 를 사용해야 함
string 을 사용하면 오류가 남
#include <iostream>
using namespace std;
int main(){
char hi[10];
cin.getline(hi,10);
cout << hi << endl;
return 0;
}
cin.getline (hi,10)의 의미
= 사용자에게 hi 라는 변수에다가 9번 입력 받겠다 (마지막 한칸은 개행문자 '\n' 저장에 사용됨)
= 사용자가 enter 키 누를때까지 or 9번 입력 들어올 때까지 입력 받음
hi는 문자 배열로 10개의 문자 저장 가능
2. getline(cin, string변수명)
string 을 사용해야 함
#include <iostream>
using namespace std;
int main(){
string str;
getline(cin,str);
cout << str << endl;
return 0;
}
getline(cin, str)의 의미
= cin에서 입력된 값을 읽어 str이라는 string 타입의 변수에 값 저장
기존의 cin 함수
= \n(띄어쓰기)을 구분자(텍스트가 끝남을 표현하는 문자)로 인식하고 그 이후 값은 저장 안함
getline 함수
= 기존대로 cin에서 받아온 값의 마지막 '\n' 을 구분자로 인식하여 값을 저장. 그 후 getline 함수는 \n 을 버퍼에서 지워서 띄어쓰기 다음 단어도 하나의 변수에 계속 저장할 수 있게 됨
-> 엔터를 기준으로 문자열 입력을 종료하게 됨
문제 풀이 코드
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
getline(cin, str);
int count = 0;
if(str.empty()){
cout << count <<endl;
return 0;
}
count = 1;
for(int i = 1; i< str.length();i++ ){
if(str[i] == ' '){
count += 1;
}
}
if(str[str.length()-1] == ' '){
count -= 1;
}
cout << count <<endl;
return 0;
}
기억할 부분
1. 문자열의 길이를 받는 함수 length 를 사용하려 했으나 해당 변수가 빈값인지 확인하기 위해서는 empty라는 함수 사용하는게 더 편리하다.
사용법 : 문자열이름.empty()
'백준 문제풀이' 카테고리의 다른 글
| [백준/boj] 1012번: 유기농 배추 | C++ (1) | 2024.01.07 |
|---|---|
| [백준/boj] 2178번: 미로 탐색 | C++ (1) | 2023.12.30 |
| [백준/boj] 2504번: 괄호의 값 | C++ (1) | 2023.12.29 |
| [백준/boj] 2493번: 탑 | C++ (3) | 2023.12.24 |
| [백준/boj] 2309번: 일곱 난쟁이 | C++ (0) | 2023.12.19 |