- istringstream 은 문자열 입력 스트림.

 

공백을 기준으로 문자열을 파싱하여 변수에 저장. ( cin 과 비슷하다. )

타입이 맞지 않을땐 0 을 리턴한다.

 

#include<iostream>
#include<sstream>

int main() {
	std::istringstream iss("this is string test haha");
	std::string str, str1, str2;
	int inta;
	
 	std::cout << iss.str() << std::endl;  // 스트림 안에 있는 string 확인
    
   	std::cout << "입력 시작 " << std::endl;
	iss >> str >> str1 >> str2 >> inta;
    
	std::cout << "str  : " << str << std::endl;
	std::cout << "str1 : " << str1 << std::endl;
	std::cout << "str2 : " << str2 << std::endl;
	std::cout << "inta : " << inta << std::endl;
    
}

 

 

[ Output ]

this is string test haha
입력 시작
this
is
string
0

 

inta 가 0 이 나온 이유는 스트림에 "test"가 읽혔고  inta에 저장하려고 보니 inta 타입이 int 이기 때문에 타입이 맞지 않아 0을 리턴.

 

 

그렇다면 아래의 결과는 어떻게 될까?

 

#include<string>
#include<iostream>
#include<sstream>

using namespace std;
int main() {
	string str = "this is string test haha";
	istringstream is(str);  // 아래 두 줄 처럼 해도 된다.
    // istringstream is;   
    // is.str(str); 
    
	cout << "스트림에는 : " << is.str() << "  문자열이 있다." << endl;
    
	string num;
	while (is >> num) cout << num << endl;
	
	return 0;
}

 

[ Output ]

더보기
스트림에는 : this is string test haha  문자열이 있다.
this
is
string
test
haha

while 문을 돌면서 스트림에 아무것도 없을때 빠져나온다.

 


[ ※ 참고 ]

std :: stringstream :: str

 

str() 은 두 가지 형태가 있다.

 

string str() const;   (1)
void str (const string& s);  (2)

 

(1) 은 스트림 버퍼에 있는 string 을 리턴한다.

(2) 은 스트림에 인자로 받은 s를 set 해준다.

 

 

[ 예시 ]

 ss.str ("Example string");    <--- (2) 번으로 사용.
 string temp = ss.str();       <----(1) 번으로 사용.
 cout << temp << '\n';

 

 


'Language & etc > Reference' 카테고리의 다른 글

assert 함수  (0) 2022.04.17
string 의 erase  (0) 2021.11.26
substr  (0) 2021.11.15

+ Recent posts