C++ Formatierte Ausgabe einer Matrix

Online-Skater

Erfahrenes Mitglied
Hallo liebe Tutorianer :)

Ich habe mal eine Frage bezüglich der Formatierung in C++. Habe ein Konsolenprogramm welches eine Matrix einliest und diese möchte ich gerne formatiert ausgeben, da nun aber unterschiedliche große Zahlen eingegeben werden können, erweist sich ein Konstanter Wert als relativ unbrauchbar mittels setw(const) .

C++:
// Ausgabe der Matrix
void print_matrix(int** arr, USINT x, USINT y)
{
    cout << "Matrix:\n";
    for(USINT i = 0; i < x; i++)
    {
      cout << "|";
      for(USINT j = 0; j < y; j++)
      {
        cout << setw(3) << arr[i][j];
      }
      cout << setw(3) << "|\n";
    }
}

Ich habe auch schon versucht dynamisch zu lösen, aber ebenfalls mit Misserfolg. Gibt es eine elegante Methode bzw. Lösung die Matrix gleichmäßig und mit gewissem Abstand auszugeben ?

Code:
|   234   -6   1500   |
|    25  -25     -8   |   Beispielsweise
|  1200  248    -77   |

Die Abstände müssten sich ja irgendwie nach der größten Zahl richten, welche man ja mit abstand = floor(log10(zahl)+1) ermitteln könnte vorher... aber gibts noch einen anderen Weg ?

Danke schonma :)
 
Hi, du könntest es in etwa so lösen:

Code:
if (zahl <10)
{
   cout << "  " << zahl;
}
else if (zahl > 9 && zahl <100)
{
  cout << " " << zahl;
}
else if ( zahl > 99 && zahl <1000)
{
  cout << zahl;
}

Der Code müsste selbsterklären sein....
Wenn die Zahl nur aus einem Zeichen besteht, dann werden 2 Leerzeichen davorgestellt.
Wenn sie aus zwei Zeichen besteht, dann wird nur noch ein Leerzeichen davorgestellt.
Und wenn sie aus 3 Zeicehn besteht, dann wird kein Leerzeichen angezeigt.

Somit bleibt alles in einer "Spalte"...
 
Die Abstände müssten sich ja irgendwie nach der größten Zahl richten, welche man ja mit abstand = floor(log10(zahl)+1) ermitteln könnte vorher... aber gibts noch einen anderen Weg ?
Nein, es gibt keine andere Möglichkeit. Du mußt vorher die Maximallänge berechnen.

@Agent2: Dein Code ließe sich ersetzen durch die Anweisung:
C++:
cout << setw(3) << zahl;
Gruß
 
Zuletzt bearbeitet:
Hallo meine Frage bezieht sich eigentlich auf dieselbe wie der Thread schon sagt, allerdings habe ich nun meine Matrizen auf double umgestellt. Wie wäre es also allgemein möglich die Länge einer Zahl zu bestimmen ? Ich habe da absolut keinen ansatz leider gibt es keine schöne Funktion wie bei Strings dafür :) Man könnte ja konvertieren und dann aber ... vielleicht gibt es einen klugen Ansatz dafür ?

Als Bsp. 127.67 hat die Länge 5 da 5 Zahlen egal ob hinter oder vor dem Komma.

mfg :)
 
Ok da alles andere zu aufwendig wäre und der Leitsatz warum schwer wenns auch einfach geht, hat sich folgende Lösung im Einsatz bewährt.

C++:
// Abstand berechnen
void distance(float val, USINT &old)
{
  ostringstream out;
  out << val;
  string str(out.str());
  USINT k = str.length();
  if (val < 0)
  {
    k++;
  }
  if (k > old)
  {
    old = k;
  }
}
 
Zurück