사용 목적
문자열로 한 줄의 데이터로 들어오면 각각 특정 문자로 분리된 단어들을 파싱
헤더
#include <sstream>
istringstream
문자열을 공백과 '\n'을 기준으로 여러 개의 다른 형식으로 차례대로 분리
istringstream iss("test\n123 aaa 456"); string s1, s2; int i1, i2; iss >> s1 >> i1 >> s2 >> i2; // 문자열을 파싱하고 변수형에 맞게 변환한다. cout << s1 << endl; // test cout << i1 << endl; // 123 cout << s2 << endl; // aaa cout << i2 << endl; // 456
하지만, 분리하고자 하는 타입이 맞지 않는다면 파싱을 멈춘다.
int main() { string str1 = "1D2S#10S"; string str2 = "1111DAWV2S#10S"; istringstream iss1(str1); istringstream iss2(str2); int num1, num2; while (iss1 >> num1) cout << num1 << " "; cout << endl; while (iss2 >> num2) cout << num2 << " "; cout << endl; istringstream iss3(str1); istringstream iss4(str2); char ch1, ch2; while (iss3 >> ch1) cout << ch1 << " "; cout << endl; while (iss4 >> ch2) cout << ch2 << " "; cout << endl; } // 실행 결과 // 1 // 1111 // 1 D 2 S # 1 0 S // 1 1 1 1 D A W V 2 S # 1 0 S
ostringstream
문자열을 조립하거나 특정 형식을 문자열로 변환
int main() { ostringstream oss; string s1 = "abc", s2 = "gjw"; int i1 = 19234; double d1 = 3.591; oss << s1 << "\n" << i1 << "\n" << s2 << "\n" << d1; // 문자열을 붙인다. cout << oss.str(); // 문자열을 꺼낸다. } // 실행 결과 // abc // 19234 // gjw // 3.591
stringstream이 사용할 수 있는 함수들
str(string s): stringstream에 저장된 문자열을 바꾼다.
str(): stringstream이 저장하고 있는 문자열의 복사본을 반환한다.
clear(): stringstream에 저장된 문자열 비우기
getline() : 공백이나 '\n'이 아닌 문자로 파싱하기int main() { string str = "gkg|qiew|789", token; stringstream ss(str); while (getline(ss, token, '|')) { cout << token << endl; } } // 실행 결과 // gkg // qiew // 789