문자열 및 I/O 서식 지정(최신 C++)
C++ <iostream> 클래스, 함수 및 연산자는 형식이 지정된 문자열 I/O를 지원합니다. 예를 들어 다음 코드는 정수를 16진수로 출력하도록 형식을 지정하도록 설정하는 cout
방법을 보여줍니다. 먼저 형식 상태가 전달되면 변경될 때까지 그대로 유지되므로 나중에 다시 설정하기 위해 cout
현재 상태를 저장합니다. 한 줄의 코드에만 적용되는 것은 아닙니다.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
ios state(nullptr);
cout << "The answer in decimal is: " << 42 << endl;
state.copyfmt(cout); // save current formatting
cout << "In hex: 0x" // now load up a bunch of formatting modifiers
<< hex
<< uppercase
<< setw(8)
<< setfill('0')
<< 42 // the actual value we wanted to print out
<< endl;
cout.copyfmt(state); // restore previous formatting
}
이 방법은 형식이 안전하며 확장 가능하지만 복잡하고 자세한 정보도 제공합니다.
대체 형식 옵션
또는 표준이 아닌 경우에도 Boost C++ 라이브러리에서 사용할 Boost.Format
수 있습니다. Boost 웹 사이트에서 모든 Boost 라이브러리를 다운로드할 수 있습니다.
몇 가지 장점은 다음과 같습니다.Boost.Format
안전: 형식이 안전하며 오류에 대한 예외(예: 너무 적거나 너무 많은 항목의 사양)를 throw합니다.
확장 가능: 스트리밍할 수 있는 모든 형식에 대해 작동합니다.
편리함: 표준 POSIX 및 유사한 형식 문자열.
안전하고 확장 가능한 C++< iostream> 기능을 기반으로 구축되었지만 Boost.Format
성능에 최적화되지는 않습니다. 성능 최적화가 필요한 경우 빠르고 사용하기 쉬운 C printf 및 sprintf를 고려합니다. 그러나 취약성으로부터 확장 가능하거나 안전하지는 않습니다. (안전한 버전이 있지만 약간의 성능 저하가 발생합니다. 자세한 내용은 printf_s, _printf_s_l, wprintf_s, _wprintf_s_l 및 sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l)를 참조하세요.
다음 코드에서는 일부 Boost 서식 기능을 보여 줍니다.
string s = str( format("%2% %2% %1%\n") % "world" % "hello" );
// s contains "hello hello world"
for( auto i = 0; i < names.size(); ++i )
cout << format("%1% %2% %|40t|%3%\n") % first[i] % last[i] % tel[i];
// Georges Benjamin Clemenceau +33 (0) 123 456 789
// Jean de Lattre de Tassigny +33 (0) 987 654 321
참고 항목
C++ 시작하기
C++ 언어 참조
C++ 표준 라이브러리
<iostream>
<limits>
<iomanip>