programing

C ++ 출력 연산자로 선행 0을 인쇄 하시겠습니까?

javaba 2021. 1. 14. 23:05
반응형

C ++ 출력 연산자로 선행 0을 인쇄 하시겠습니까?


출력을 C ++로 포맷하려면 어떻게해야합니까? 즉, printf다음과 같은 사용에 해당하는 C ++는 무엇입니까?

printf("%05d", zipCode);

printfC ++에서 사용할 수 있지만 출력 연산자를 선호합니다 <<.

다음을 사용 하시겠습니까?

std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl;

이것은 적어도 귀하의 질문에 언급 된 우편 번호 (b) 와 같은 음수가 아닌 숫자 (a)에 대해 트릭을 수행합니다 .

#include <iostream>
#include <iomanip>

using namespace std;
cout << setw(5) << setfill('0') << zipCode << endl;

// or use this if you don't like 'using namespace std;'
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;

패딩을 제어하는 ​​가장 일반적인 IO 조작기는 다음과 같습니다.

  • std::setw(width) 필드의 너비를 설정합니다.
  • std::setfill(fillchar) 채우기 문자를 설정합니다.
  • std::setiosflags(align) 정렬을 설정합니다. 여기서 align은 ios :: left 또는 ios :: right입니다.

그리고를 사용하는 것에 대한 선호도에 <<따라 fmt라이브러리 를 살펴볼 것을 강력히 제안합니다 . 이것은 형식을 지정하기위한 툴킷에 큰 도움이되었으며 대량의 스트림 파이프 라인보다 훨씬 좋으므로 다음과 같은 작업을 수행 할 수 있습니다.

cout << fmt::format("{:05d}", zipCode);

그리고 그것은 현재 LEWG가 C ++ 20을 목표로 삼고 있습니다. 즉, 그 시점에서 언어의 기본 부분이 될 것이라는 의미입니다.


(가) 당신이 경우에 음수를 처리 할 필요가, 당신은 사용할 수 있습니다 std::internal으로 다음과 같습니다 :

cout << internal << setw(5) << setfill('0') << zipCode << endl;

이렇게 하면 부호와 크기 사이에 채우기 문자가 배치 됩니다.


(b) 이것은 ( "모든 우편 번호가 음수가 아닙니다")는 제 입장에서 가정하지만 합리적으로 안전한 가정입니다. 보증합니다 :-)


setw 및 setfill 호출을 사용하십시오 .

std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;

cout << setw(4) << setfill('0') << n << endl;

에서:

http://www.fredosaurus.com/notes-cpp/io/omanipulators.html


또는,

char t[32];
sprintf_s(t, "%05d", 1);

OP가 이미 원하는대로 00001을 출력합니다.

참조 URL : https://stackoverflow.com/questions/530614/print-leading-zeros-with-c-output-operator

반응형