[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어의 개수 (1152)
[ 문제 ]
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
[ 입력 ]
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
[ 출력 ]
첫째 줄에 단어의 개수를 출력한다.
[ 코드 ]
#include<iostream>
#include<string>
using namespace std;
int main() {
string str; // 문자열 입력 변수
getline(cin, str);
// 만약 문자열이 비어있을 경우
if (str.empty()) {
cout << "0";
return 0;
}
// 공백 개수 count
int count = 1;
for (int i = 0; i < str.length() ; i++)
{
if (str[i] == ' ') // 만약 문자가 공백이라면
{
count++;
}
}
// 문자열의 앞과 뒤에 공백이 있는 경우를 제외해주기
if (str[0] == ' ')
{
count--;
}
if (str[str.length() - 1] == ' ')
{
count--;
}
// 문자열 개수 출력해주기
cout << count << endl;
return 0;
}
[ cin과 getline()에 대해서 ]
1. Cin
- <iostream>에 포함되어 있음
- 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져옴
- 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들임
2. getline()
1) istream 라이브러리의 cin.getline()
istream & getline(char *s, streamsize n);
istream & getline(char *s, streamsize n, char delim);
// ex. cin.getline(str,100)
- 입력 시퀀스로부터 문자를 읽어들여 C 형식의 문자열로 s에 저장함.
* s : C형식 문자열을 저장할 배열을 가리키는 포인터
* n : 저장할 문자의 최대 개수 (끝의 종료 null 문자를 포함한 값)
* delim : 제한자로, 이 문자에 도달시 추출이 중단됨 (이 문자는 s에 기록되지는 않지만, 스트림에서 사라지게 됨)
2) string 라이브러리의 getline()
getline(istream& is, string str);
getline(istream& is, string str, char dlim);
// ex.getline(cin,str)
- 최대 문자 수를 입력하지 않아도 되며, 원하는 구분자(delimiter)를 만날 때까지 모든 문자열을 입력 받아 하나의 string 객체에 저장함.
※ getline() 함수 사용시 주의점
int n;
string str;
cin>>n;
cin.ignore();
// ignore()을 해주지 않으면, n을 입력받은 후 문자열을 입력받지 않고 바로 다음 코드로 넘어가게 됨
// 버퍼에 정수값을 입력한 뒤 누른 엔터(\n)가 그대로 남아있어, getline에 들어가기 때문
getline(cin,str);
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |
'문과 코린이의, [C. C++] 기록 > C++ 백준 문제풀이' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 뒤집기 (9093) (0) | 2021.07.06 |
---|---|
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 스택 (10828) (0) | 2021.07.06 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 다이얼 (5622) (0) | 2021.06.30 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 상수 (2908) (0) | 2021.06.30 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 공부 (1157) (0) | 2021.06.29 |