C++에서 setw 조작기 활용

Jinku Hu 2023년10월12일
C++에서 setw 조작기 활용

이 게시물은 C++에서setw스트림 조작기를 활용하는 방법을 보여줍니다.

std::setw함수를 사용하여 C++에서 다음 I / O 작업의 너비 수정

스트림 조작기는 입력 / 출력 형식을 수정하고 때로는 일부 작업을 생성하는 특수 개체입니다. 출력 스트림에서 사용되는 가장 일반적인 객체 인std::endl함수는 실제로 스트림 조작자입니다. 개행 문자를 인쇄하고 출력 버퍼를 플러시합니다.

반면std::setw명령은 출력을 생성하지 않습니다. 대신 다음 I / O의 너비를 전달 된 정수 인수로 설정합니다. 일부 스트림 조작자는 인수를 사용합니다. 여기에는<iomanip>헤더가 포함되어야합니다. 다음 예제는setw조작기에 대한 기본 출력 형식화 시나리오를 보여줍니다. setfill조작기는setw의 자연스러운 동반자입니다. 전자는 주어진char인수로 채우기 문자를 수정하는 데 유용합니다.

#include <iomanip>
#include <iostream>
#include <sstream>

using std::cout;
using std::endl;
using std::setw;
using std::string;

int main() {
  cout << "setw() : |" << 11 << "|" << endl
       << "setw(4): |" << setw(4) << 11 << "|" << endl
       << "setw(4): |" << 22 << setw(4) << std::setfill('-') << 22 << 33 << "|"
       << endl;

  return EXIT_SUCCESS;
}

출력:

setw() : |11|
setw(4): |  11|
setw(4): |22--2233|

또는setw조작기를 사용하여stringstream객체에서 추출 된 문자 수를 제한 할 수 있습니다. 이 메소드는 고정 배열로 선언 된char버퍼에 유용 할 수 있습니다. 일반적으로 조작자는 함수 오버로딩을 사용하여 구현됩니다.

각 조작자는 스트림에 대한 참조를 반환하는 함수입니다. 이러한 함수 중 하나에 대한 포인터는 자체적으로 오버로드 된 연산자 인 스트림 추출 / 삽입 연산자로 전달됩니다. 인수 함수는 오버로드 된 연산자 본문에서 호출됩니다.

#include <iomanip>
#include <iostream>
#include <sstream>

using std::cout;
using std::endl;
using std::setw;
using std::string;

int main() {
  std::stringstream ss1("hello there");
  char arr[10];

  ss1 >> setw(6) >> arr;
  cout << arr;

  return EXIT_SUCCESS;
}

출력:

hello

setw조작기의 유용한 기능 중 하나는 고정 크기 버퍼에 저장해야하는 사용자 입력에 대한 제한을 쉽게 설정하는 것입니다. sizeof(buffer)setw에 대한 인수로 전달하기 만하면됩니다. setw호출은 단일 I / O 작업에 영향을 미치며 기본 너비가 자동으로 복원됩니다. 반대로setfill수정은 명시적인 변경이있을 때까지 활성 상태로 유지됩니다.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

int main() {
  char buffer[24];
  cout << "username: ";
  cin >> setw(sizeof(buffer)) >> buffer;

  return EXIT_SUCCESS;
}

출력:

username:
작가: 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