다음을 통해 공유


문자열 및 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 printfsprintf를 고려합니다. 그러나 취약성으로부터 확장 가능하거나 안전하지는 않습니다. (안전한 버전이 있지만 약간의 성능 저하가 발생합니다. 자세한 내용은 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>