프로그래밍/C,C++

[C/C++] StringStream 사용법 (문자열 나누기)

노력의천재 2020. 11. 14. 20:07
// C++ 에서는 split 메서드가 따로 없어서 이와같이 구현해야 한다.
#include<bits/stdc++.h>
using namespace std;

vector<string> split(string s, string d) { // 입력값, 구분자
	vector<string> res;
	long long pos = 0;
	string token = "";
	
	while ((pos = s.find(d)) != string::npos) {
		token = s.substr(0, pos);
		res.push_back(token);
		s.erase(0, pos + d.size());
	}
	res.push_back(s);
	
	return res;
}

int main() {
	string s = "안녕하세요 숭황이는 멍청이 해삼이에요!";
	string d = " ";
	vector<string> v = split(s, d);
	
	for (auto i : v) {
		cout << i << "\n";
	}
}
#include <iostream>
#include <string>
#include <sstream> // 헤더 필수
using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	string s1 = "apple oragne banna kiwi";
	string s2 = "12:00,12:14,HELLO,CDEFGAB";
	string start, end, name, sheet, token;
	
   	 // stringstream : 구분자가 공백
	for(stringstream ss(s1); (ss >> token); ) {
         	 cout<<token<<"\n";
     	 }
    
	// stringstream + getline : 구분자를 커스텀할 수 있음
	stringstream ss(s2);
	
	getline(ss, start, ',');
	getline(ss, end, ',');
	getline(ss, name, ',');
	getline(ss, sheet, ',');
	
	cout<<start<<"\n";
	cout<<end<<"\n";
	cout<<name<<"\n";
	cout<<sheet<<"\n";
    
    stringstream ss(s2);
    string token;

    // ,을 기준으로 split
    while (getline(ss, token, ',')) {
    	if(token != "") cout << token << "\n"; 
    }
}