c++ ostringstream 예제

August 2, 2019 at 3:33 am

이 프로그램에서는 파일 스트림에 대한 rdbuf() 호출을 ostringstream에 삽입하여 전체 파일을 문자열로 읽습니다. 이제 HTML 구분 기호 쌍을 검색하고 3 장의 이전 버전과 마찬가지로 줄 경계를 넘나드는 것에 대해 걱정할 필요없이 지우는 것은 쉬운 문제입니다. 다음 예제에서는 양방향(즉, 읽기/쓰기) 문자열 스트림을 사용하는 방법을 보여 주며, 다른 출력 스트림과 마찬가지로 << 연산자 및 endl과 같은 일반 서식 도구를 사용하여 바이트를 ostringstream으로 보낼 수 있음을 알 수 있습니다. str() 함수는 호출할 때마다 새 문자열 개체를 반환하므로 문자열 스트림이 소유한 기본 stringbuf 개체가 그대로 유지됩니다. << 연산자는 스트림에 데이터를 삽입합니다. 예를 들어 여러 응용 프로그램의 경우 ostringstream을 사용하는 이 방법은 변환 문제에 대한 참처럼 작동합니다. 방금 본 것보다 더 실용적인 예는 숫자와 텍스트 데이터를 혼합하여 문자열에 저장하는 것입니다. 데이터 형식 float의 최대 값과 최소 값을 설명하는 문자열을 포맷해야 한다고 가정해 보겠습니다: 클래스 템플릿 std::basic_ostringstream은 메모리(std::basic_string)기반 스트림에서 출력 작업을 구현합니다. 기본적으로 원시 문자열 장치 구현(std::basic_stringbuf)을 상위 수준 인터페이스(std::basic_ostream)로 래핑합니다.

고유한 std::basic_stringbuf 멤버에 대한 완전한 인터페이스가 제공됩니다. 다음은 예제의 코드와 출력입니다. 이 예제에서와 같이 istringstream 생성자의 입력 문자열을 지정할 수도 있습니다. 그러나 모범 사례는 아닙니다. 매우 저평가된 iostream 라이브러리는 오스트링스트림 의 형태로 훨씬 더 나은 옵션을 제공합니다. 이 클래스는 버퍼링된 스트림을 제공하며 스트리밍한 정보를 포함하는 std::string을 반환합니다. iostream이기 때문에 스트림 처리기가 존재하는 한 모든 형식을 전달할 수 있습니다. 이 기사에서 직접 작성하는 것을 다루지는 않지만 실제로 는 매우 쉽습니다. 이는 int 및 float를 가져온 이전의 Istring.cpp 예제와 유사합니다. 샘플 실행은 다음과 같습니다(키보드 입력은 굵은 글씨입력).

언제나처럼, put 포인터를 이동하려면 seekp ()를 호출하고 get 포인터의 위치를 지정하려면 seekg ()를 호출합니다. 이 예제에서는 나타내지 않았지만 문자열 스트림은 언제든지 읽기에서 쓰기로 전환하거나 그 반대로 전환 할 수 있다는 점에서 파일 스트림보다 조금 더 용서합니다. get의 위치를 조정하거나 포인터를 배치하거나 스트림을 플러시할 필요가 없습니다. 이 프로그램은 또한 스트림의 기본 stringbuf를 새 문자열로 대체하는 str()의 오버로드를 보여 줍니다. 출력 문자열 스트림을 만들려면 삽입한 모든 것을 보유할 동적으로 크기조정된 문자 버퍼를 관리하는 ostringstream 개체만 만듭니다. 형식이 지정된 결과를 문자열 개체로 얻으려면 str() 멤버 함수를 호출합니다. 다음은 예제: 이 예제는 문자열 “hello”와 변수 i를 stream1에 삽입합니다. 반대로 ,<) 연산자는 문자열 스트림에서 데이터를 추출합니다: 따라서 기본 개념은 ostringstream을 만든 다음 다음과 같이 정보를 전달하여 스트림 str()을 지우고 스트림에 콘텐츠가 있는 문자열 개체를 얻고 설정하는 것입니다.