c++에서 공백을 포함한 문자열을 받는 방법을 알게 됐다!
첫 시도에 답이 이상하게 나와서 문제를 찾다가 애초에 input으로 받은 값이 공백 기준으로 잘린다는 것을 확인함. c++에서 공백 포함한 문자열을 받기 위해선 getline 함수를 사용해야 한다.
getline 함수: 문자열을 스페이스가 아닌 엔터 기준으로 받아옴(istream헤더/string헤더)
💡 istream& getline(istream &is, string &str, char delim); //delim은 제한자. 생략 가능
주의할 점. cin 사용 직후 getline함수 사용 시 입력버퍼를 지워줘야 함. cin.ignore() 이거 안 쓰면 cin으로 받은 직후 버퍼에 남은 string이 getline으로 들어감. 사용 전 버퍼 초기화 해주는 것 잊지말기.
피신 하면서 작성한 코드 로컬파일로 들고있다가 오늘 겨우 푸쉬했다. idle에 깃허브 연동해야 된다는 강박이 있어서 git bash 무시하고 있었는데 결국 익숙한 터미널 환경에서 push했다^^... 역시 이게 제일 쉽고 간편함.
틀린 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
int cnt = 0;
int i = 0;
cin >> input;
if (input[i] != ' ')
cnt++;
i++;
while (input[i]) {
if (input[i - 1] == ' ')
cnt++;
i++;
}
cout << cnt << endl;
return 0;
}
맞은 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
int cnt = 0;
int i = 0;
cin.ignore();
getline(cin, input);
if (input[i] != ' ')
cnt++;
i++;
while (input[i]) {
if (input[i - 1] == ' ')
cnt++;
i++;
}
cout << cnt << endl;
return 0;
}