C++에서 STL Stringstream 클래스 사용
이 기사는 C++에서 STL stringstream
클래스를 사용하는 방법을 보여줍니다.
stringstream
클래스를 사용하여 C++의 문자열 스트림에 대한 입력 / 출력 작업 수행
일반적으로 STL 스트림 기반 I / O 라이브러리 클래스에는 문자 기반, 파일 및 문자열의 세 가지 유형이 있습니다. 각각은 일반적으로 해당 속성에 가장 적합한 시나리오에 사용됩니다. 즉, 문자열 문자열은 일부 I / O 채널에 연결하는 것과 달리 데이터를 저장할 임시 문자열 버퍼를 제공하지 않습니다. std::stringstream
클래스는 문자열 기반 스트림에 대한 입력 / 출력 작업을 구현합니다. 이 유형의 개체를 스트림 작업 및 강력한 멤버 함수를 사용하여 조작 할 수있는 문자열 버퍼로 처리 할 수 있습니다.
stringstream
클래스에 포함 된 가장 유용한 함수 중 두 가지는str
및rdbuf
입니다. 첫 번째는 기본 문자열 개체의 복사본을 검색하는 데 사용됩니다. 반환 된 객체는 일시적이며 표현식의 끝을 파괴합니다. 따라서str
함수의 결과에서 함수를 호출해야합니다.
제공된 값으로stringstream
의 내용을 설정하는 인수로 문자열 개체를 사용하여 동일한 프로세스를 호출 할 수 있습니다. cout
스트림에 삽입 될 때 항상stringstream
객체에서str
함수를 호출해야합니다. 그렇지 않으면 컴파일러 오류가 발생합니다. 또한 이전 동작은 C++ 11 표준 이후로 구현되었습니다.
반면에rdbuf
멤버 함수를 사용하여 기본 원시 문자열 개체에 대한 포인터를 검색 할 수 있습니다. 이것은 마치 문자열 객체가cout
스트림에 전달되는 것처럼 작동합니다. 결과적으로 다음 예제와 같이 버퍼의 내용이 인쇄됩니다.
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::istringstream;
using std::stringstream;
int main() {
stringstream ss1;
ss1 << "hello, the number " << 123 << " and " << 32 << " are printed" << endl;
cout << ss1.str();
stringstream ss2("Hello there");
cout << ss2.rdbuf();
return EXIT_SUCCESS;
}
출력:
hello, the number 123 and 32 are printed
Hello there
stringstream
클래스의 또 다른 기능은 숫자 값을 문자열 유형으로 변환 할 수 있다는 것입니다. 이전 코드 조각은 문자열 리터럴과 숫자를stringstream
개체에 삽입했습니다. 또한str
함수를 사용하여 내용을 검색 할 때 모든 것이 문자열 유형이며 이와 같이 처리 될 수 있습니다.
세 가지 고유 한 문자열 기반 스트림 개체가 있습니다 :stringstream
,istringstream
및ostringstream
. 후자의 두 가지는 각각 입력 및 출력 작업 만 제공하기 때문에 다릅니다. 이것은 일부 멤버 함수가 특정 스트림 유형에만 영향을 미친다는 것을 의미합니다.
예를 들어, 다음 코드 샘플은stringstream
및istringstream
오브젝트에서 개별적으로putback
함수를 호출합니다. putback
멤버 함수는 입력 스트림에 단일 문자를 추가하는 데 사용됩니다. 따라서 입력 및 출력 속성을 제공하는stringstream
개체에서만 성공합니다.
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::istringstream;
using std::stringstream;
int main() {
stringstream ss2("Hello there");
cout << ss2.rdbuf();
if (ss2.putback('!'))
cout << ss2.rdbuf() << endl;
else
cout << "putback failed" << endl;
istringstream ss3("Hello there");
ss3.get();
if (ss3.putback('!'))
cout << ss3.rdbuf() << endl;
else
cout << "putback failed" << endl;
return EXIT_SUCCESS;
}
출력:
Hello there!
putback failed
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook