문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
풀이 코드
#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;
string bufferflush;
getline(cin, bufferflush);
while(n--){
string s;
getline(cin, s);
vector<string> s2 = split(s," ");
for(auto i : s2){
cout << i;
}
cout << "\n";
}
return 0;
}
getline으로 여러번 입력 받는 방법을 몰라서 못 풀고 있었는데 감사하게도 버퍼 플러쉬를 쓰면 된다고 큰돌님이 알려주셨다!..
처음에는 getline으로 여러번 받는 것이 안돼서 구글링 해서 찾아보니 cin.ignore()
를 사용해야 된다는 걸 보고 이걸 썼었는데, n번 입력은 잘 받아지지만 문제는..... 두번째 문자열부터 앞 글자가 하나씩 빠진 채로 출력이 되는 문제가 있었다.
버퍼 플러쉬를 쓰니 원하는 대로 출력이 되어 제출한 문제!
c++은 split이 없어서 split 함수를 구현해서 reverse 시킨 vector를 사용해서 풀었다.
어려운 문제는 아닌데 버퍼 플러쉬를 몰라서 제출을 못하고 있었다. ㅋㅋㅋ 버퍼 플러쉬 메모메모..!