[c++] stringstream

hwee·2024년 1월 17일
0

c++문법

목록 보기
1/4
post-thumbnail

사용 목적

문자열로 한 줄의 데이터로 들어오면 각각 특정 문자로 분리된 단어들을 파싱

헤더

#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

출저
https://tech-interview.tistory.com/199

profile
https://fuzzy-hose-356.notion.site/1ee34212ee2d42bdbb3c4a258a672612

0개의 댓글

관련 채용 정보