728x90
C++로 PS를 하다보면 가장 짜증날 때가 문자열을 다룰때일 것이다.
문자열을 파싱할때, 문자열을 정수형으로 변환하거나 역변환할때 자바 파이썬 사용자들은 편한 방법을 사용할 수 있지만 C++ 유저들은 이것 또한 암기를 하고 있어야한다.
1. #include<sstream>
string stream 의 약자이다. 특이하게 cin >> 으로 입력하는 방식과 다르게 << 가 입력으로 오버라이딩 되어있다. 무슨 말인지는 아래에서
2. 예제
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
int main() {
string str = "ABC DEF G";
stringstream ss(str);
vector<string> STR;
string tmp;
while (ss >> tmp) {
STR.push_back(tmp);
}
for (auto a : STR)
cout << a << endl;
}
str 이라는 문자열에서 공백을 제외하고 파싱해 저장하고싶다.
stringstream ss(str) 을 선언한다. ss에는 공백으로 자른 str을 가지고 있다.
while 문에서 공백을 기준으로 잘라 tmp에 넣어주고 벡터에 넣어놓았다. 결과는 다음과 같다.
그렇다면, PS에서 자주만나는 문자열을 정수로 바꿔야하는 경우까지 응용해보자.
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
int main() {
string str = "1 22 33 44 51";
stringstream ss(str);
vector<string> STR;
string tmp;
while (ss >> tmp) {
STR.push_back(tmp);
}
cout << "문자열" << endl;
for (auto a : STR)
cout << a << endl;
vector<int> INTSTR;
for (auto a : STR)
INTSTR.push_back(stoi(a));
cout << "정수" << endl;
for (auto a : INTSTR)
cout << a << endl;
cout << "다시 문자열" << endl;
for (auto a : INTSTR)
cout << to_string(a) << endl;
}
문자열을 정수로 바꿔주는 함수 stoi(str) 여기서 파라미터는 반드시 문자열이다. 문자는 할 수 없다.
정수를 문자열로 바꿔주는 건 간단하다. to_string(a) 해주면 된다.
'Dev > C,C++' 카테고리의 다른 글
vector<int> 보다 vector<bool> 이 느리다? (0) | 2024.08.08 |
---|---|
C++ vector 초기화 방법 (0) | 2023.10.29 |
시퀀스 컨테이너 - list (0) | 2023.03.26 |
C++ 연관 컨테이너 set, mutiset (0) | 2023.03.22 |
map의 다양한 사용법 - key, value 순으로 정렬, auto 반복문 (2) | 2023.02.26 |