반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
C++ getline() string을 vector에 나누어 담기 (2자리 이상 숫자 쪼개짐 문제 해결) 본문
반응형
1 2 3 4 B B 42 B F F
다음과 같이 공백과 숫자(1<=n<=99), 문자가 입력으로 주어졌을 때, 제대로 입력 받는 방법
일단 공백이 있으므로 cin대신 getline()을 쓴다.
그러면 이렇게 출력된다.
string s;
getline(cin, s);
cout << s << endl;
//1 2 3 4 B B 42 B F F
for (int i = 0;i < s.size();i++) {
cout << s[i] << " ";
}
//1 2 3 4 B B 4 2 B F F
문제는.. 이것은 내가 원하는 출력이 아니다.
getline()은 42처럼 2자리 이상의 숫자까지 하나씩 나눠버리는 문제가 있다.
이것을 해결하기 위해 여러 방법을 찾아 보았는데 stringstream이 가장 간결했다.
사용 방법은 아래와 같다.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <sstream>
using namespace std;
int main() {
string s;
getline(cin, s); //공백 포함한 1줄 입력
stringstream ss(s);
string token;
vector<string> num;
while (getline(ss, token, ' ')) {
if (token != "") {
num.push_back(token);
}
}
for(auto x: num){
cout << x << endl;
}
}
getline으로 받은 string을 stringstream으로 나누어 주고,
나눈 문자열을 공백을 기준으로 다시 getline()하며, 한 단어씩 vector에 담는다.
이후 string vector를 가지고 원하는 것을 하면 된다.
//for(int i=0;i<s.size();i++){
// cout<<s[i]<<" ";
//}
for(auto x: num){
cout << x << endl;
if (x == "B") {
cout << "B" << endl;
}
else if (x == "F") {
cout << "F" << endl;
}
}
참고로 나는 이거처럼 숫자면 출력, B면 B출력, F면 F를 출력하는 간단한 코드를 돌리고 싶었던 건데,
위에 주석같이 배열처럼 접근하면 왠진 모르겠지만 디버그 에러라는 것이 떴다.
일단 auto를 쓴 for문을 돌렸더니 해결되었다..
찝찝하지만; 뭔가 해결.
추가로 참고하면 좋은 글: https://eclipse360.tistory.com/97
반응형
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
BOJ 수학 10610 1780 1292 2004 C++ (0) | 2022.01.10 |
---|---|
BOJ 수학 1676 1049 1094 11051 C++ (0) | 2022.01.09 |
백준 15684 사다리 조작 c++ (0) | 2021.09.15 |
9267 문제 풀이 기록 (0) | 2021.08.06 |
백준 9466 텀 프로젝트 (0) | 2021.04.29 |
Comments