본문 바로가기

Dev/C,C++

C++ 문자열 자르기 split / 문자열 <-> 정수 형 변환

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) 해주면 된다.