인프런 커뮤니티 질문&답변
작성자 없음
작성자 정보가 삭제된 글입니다.
getline 질문드립니다.
작성
·
538
0
안녕하세요오
split 관련 문제를 풀어보고 싶어서 찾아보던 중, 백준 9093번 문제를 발견하게 되어 풀어보았습니다!
공백을 포함해서 받아야 해서 getline을 통해 여러번 입력을 받으려니 cin.ignore()를 해야만 가능한 것 같아서 사용해보았는데요, 질문은 다음과 같습니다!
▼ 입력
3
I am happy today
We want to win the first prize
hello world!▼ 출력 시 코드 결과
I ma yppah yadot
e tnaw ot niw eht tsrif ezirp
olle !dlrow원하는 결과는
eW tnaw ot niw eht tsrif ezirp
olleh !dlrow 인데,
코드를 돌려보니 문자열이 뒤집혀서 출력되는 것은 원했던 바가 맞는데, 보시다시피 2번째 문자열부터 맨 앞글자가 하나씩 빠지는 문제가 있었습니다.
코드를 어떻게 수정해야 원하는 결과가 나올지 궁금합니다!
전체 코드
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string s, string delimiter){
string token = "";
int pos;
vector<string> str;
while( (pos = s.find(delimiter)) != string::npos ){
token = s.substr(0, pos);
reverse(token.begin(), token.end());
token += " ";
str.push_back(token);
s.erase(0, pos + 1);
}
reverse(s.begin(), s.end());
str.push_back(s);
return str;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
while(n){
string s;
cin.ignore();
getline(cin, s);
vector<string> s2 = split(s," ");
for(auto i : s2){
cout << i;
}
cout << "\n";
n--;
}
return 0;
}답변 1
1
큰돌
지식공유자
안녕하세요 이유님 ㅎㅎ
해당 부분은 버퍼플래쉬를 하면 됩니다. 해당 부분 교안에 추가하겠습니다.
다음코드처럼 구성하면 되구요.
#include <bits/stdc++.h>
using namespace std;
int T;
string s;
int main(){
cin >> T;
string bufferflush;
getline(cin, bufferflush);
for(int i = 0; i < T; i++){
getline(cin, s);
cout << s << "\n";
}
return 0;
}
http://boj.kr/cb10b9f264a54e6c9a65456a7a53dd60
해당 문제에 대한 풀이는 앞의 코드를 참고해주시면 됩니다.
감사합니다.





