C++에서 STL Stringstream 클래스 사용

Jinku Hu 2023년10월12일
C++에서 STL Stringstream 클래스 사용

이 기사는 C++에서 STL stringstream클래스를 사용하는 방법을 보여줍니다.

stringstream클래스를 사용하여 C++의 문자열 스트림에 대한 입력 / 출력 작업 수행

일반적으로 STL 스트림 기반 I / O 라이브러리 클래스에는 문자 기반, 파일 및 문자열의 세 가지 유형이 있습니다. 각각은 일반적으로 해당 속성에 가장 적합한 시나리오에 사용됩니다. 즉, 문자열 문자열은 일부 I / O 채널에 연결하는 것과 달리 데이터를 저장할 임시 문자열 버퍼를 제공하지 않습니다. std::stringstream클래스는 문자열 기반 스트림에 대한 입력 / 출력 작업을 구현합니다. 이 유형의 개체를 스트림 작업 및 강력한 멤버 함수를 사용하여 조작 할 수있는 문자열 버퍼로 처리 할 수 ​​있습니다.

stringstream클래스에 포함 된 가장 유용한 함수 중 두 가지는strrdbuf입니다. 첫 번째는 기본 문자열 개체의 복사본을 검색하는 데 사용됩니다. 반환 된 객체는 일시적이며 표현식의 끝을 파괴합니다. 따라서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,istringstreamostringstream. 후자의 두 가지는 각각 입력 및 출력 작업 만 제공하기 때문에 다릅니다. 이것은 일부 멤버 함수가 특정 스트림 유형에만 영향을 미친다는 것을 의미합니다.

예를 들어, 다음 코드 샘플은stringstreamistringstream오브젝트에서 개별적으로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
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ IO