Velog는 수입 창출이 없는 곳이니 맘 편히 백준 업로드 하도록 하겠습니다 :)
단순 cin
을 통해 문자열을 입력받게 된다면, 공백을 기준으로 입력받기 때문에
abcd efgh
가 abcd
로 입력 받게 됩니다.
#include <iostream>
using namespace std;
int main(){
string a;
cin >> a; // 입력 : abcd efgh
cout << a.length() << "\n"; // 출력 : 4 (원하는 결과 : 9)
cout << a << "\n"; // 출력 : abcd (원하는 결과 : abcd efgh)
}
이를 보완할 수 있는 함수가 바로 getline( )입니다!
getline(cin, 받을 변수)
공백을 포함하여 입력 창에 들어오는 모든 문자열을 받아오는 함수입니다.
백준 1152번: 단어의 개수 출처 🥉브론즈 2
질문 : 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력 : 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력 : 첫째 줄에 단어의 개수를 출력한다.
알고리즘 분류 : 구현, 문자열
getline(cin, sen)
을 통해 공백 포함 문자열을 입력받는다.len
변수에 입력 받는 문자열 sen의 길이를 넣어준다.i = 0
이고 맨 앞글자가 공백이 아닐 때(영문자일 때) ex) The zae
#include <iostream>
#include <string>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int cnt = 0;
string sen;
getline(cin, sen); // getline()을 통해 문자열 입력받기
int len = sen.length();
for (int i = 0; i < len; i++){
if (i == 0 && sen[0] != ' ') { // 맨 앞글자가 공백 X
cnt++;
continue;
}
if (sen[i] == ' '){
if (i+1 == len) break; // 접근할 수 없는 인덱스
if ((sen[i+1] >= 'a' && sen[i+1] <= 'z') || (sen[i+1] >= 'A' && sen[i+1] <= 'Z')){
cnt++;
i++; // 뛰어넘기
}
}
}
cout << cnt;
return 0;
}