Verwendung von den setw-Manipulator in C++

Jinku Hu 12 Oktober 2023
Verwendung von den setw-Manipulator in C++

Dieser Beitrag zeigt, wie Sie den Stream-Manipulator setw in C++ verwenden.

Verwenden Sie die Funktion std::setw, um die Breite der nächsten I/O-Operation in C++ zu ändern

Stream-Manipulatoren sind spezielle Objekte, die die Eingabe-/Ausgabeformatierung ändern und manchmal eine Aktion generieren. Die Funktion std::endl, wohl das am häufigsten verwendete Objekt in Ausgabestreams, ist tatsächlich ein Stream-Manipulator. Es druckt ein Zeilenumbruchzeichen und leert den Ausgabepuffer.

Der Befehl std::setw hingegen erzeugt keine Ausgabe. Stattdessen setzt es die Breite des nächsten E/A auf das übergebene ganzzahlige Argument. Einige Stream-Manipulatoren verwenden Argumente; diese müssen einen <iomanip>-Header enthalten. Das folgende Beispiel zeigt das grundlegende Szenario der Ausgabeformatierung für den Manipulator setw. Der Manipulator setfill ist der natürliche Begleiter von setw. Ersteres ist nützlich, um das Füllzeichen mit dem angegebenen char-Argument zu ändern.

#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;
}

Ausgabe:

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

Alternativ können wir den setw-Manipulator verwenden, um die Anzahl der aus dem stringstream-Objekt extrahierten Zeichen einzuschränken. Diese Methode kann für char-Puffer nützlich sein, die als feste Arrays deklariert sind. Im Allgemeinen werden Manipulatoren mithilfe der Funktionsüberladung implementiert.

Jeder Manipulator ist die Funktion, die einen Verweis auf den Stream zurückgibt. Die Zeiger auf eine dieser Funktionen werden an die Operatoren zum Extrahieren/Einfügen von Streams übergeben, die selbst überladene Operatoren sind. Die Argumentfunktionen werden aus den Körpern der überladenen Operatoren aufgerufen.

#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;
}

Ausgabe:

hello

Eine nützliche Funktion des Manipulators setw besteht darin, die Grenze für die Benutzereingaben, die in einem Puffer mit fester Größe gespeichert werden müssen, einfach festzulegen. Wir müssen nur sizeof(buffer) als Argument an setw übergeben. Beachten Sie, dass der Aufruf setw einen einzelnen I/O-Vorgang beeinflusst und dann automatisch die Standardbreite wiederhergestellt wird. Umgekehrt bleibt die setfill-Modifikation bis zur expliziten Änderung aktiv.

#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;
}

Ausgabe:

username:
Autor: 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