Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.11.2006, 18:06

"Textformatierungsproblem" in Konsole

Hallo Leute,

Also ich hab folgendes Problemchen. Bei uns an der wars ne Aufgabe, von nem Text,der von ner Datei eingelesen wird, alle Buchstaben Sonderzeichen etc. zu zählen und in ner Tabelle (folgt gleich) auszugeben.

C-/C++-Quelltext

1
2
3
4
cout << "+-----------+\n";
cout << "| Dateiname |\n";
cout << "+-----------+\n";
cout << "| a = xxx   |\n";


Ich glaub ist klar was gemeint ist. Jetzt hab ich mich gefragt, dass, wenn z.b. der Dateiname kleiner oder größer ist, die Tabelle nicht mehr schön formatiert ist, also die "|" nicht mehr an ihrem richtigne Ort sind.

Lösung war also folgende:

C-/C++-Quelltext

1
|\tDateiname\t|


Hat für die Aufgabe natürlich genügt, aber hier meine Frage.

Gibts eine vernünftige und einfach Methode,dass die Tabelle immer den gleichen Umriss hat sofern das Wort nicht eine gewisse Maximallänge überschreitet.
Z.B.: soll die Tabelle für alle Wörter zwischen einer Länge von 1 und 20 gleich ausschauen.

Es gäb natürlich die Überprüfung mit der Länge des Strings und je nachdem wie lang er ist, unterschiedliche viele tabs (\t) einzufügen, aber irgendwie sieht das im code doch recht hässlich aus.

Kann man irgendwie dem Programm sagen,er soll das wort mit "aktivierter EINFG Taste" schreiben? weil dann würden die zuvielentabs doch mit Buchstaben überschrieben werden oder?


naja würd mich interessieren wie ihr sowas lösen würdet:)


mfg
Simon

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

27.11.2006, 19:01

C-/C++-Quelltext

1
std::cout.width(X);

Damit kannst du die Länge der direkt folgenden Ausgabe festlegen.

// X in deinem Fall z.B. 20

3

27.11.2006, 19:30

wie genau verwend ich das dann?

also,wenn ich z.b. sagen wir in der zeile maximal 20 zeichen haben will

C-/C++-Quelltext

1
cout.width(20) << "|\t\tblablablabla\t\t|";


und dann schneidet es notfalls das "blablablabla" ab, falls es zuviele zeichen hat bzw setzt tabs,wenn leerzeichen sind?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

27.11.2006, 19:52

C-/C++-Quelltext

1
2
cout.width(20);
cout << "Test...";

Weiß nich, ob es auch andere Einbettungsmöglichkeiten gibt, ist aber gut möglich.
Außerdem gibt es noch Flags, mit denen man festlegen kann, ob die Ausgabe rechts- oder linksbündig erfolgt und noch ne Menge anderer Sachen... mach dich einfach mal per Doku / MSDN / Google über iostream-Manipulatoren schlau ;)

Und was die genaue Verwendung angeht: einfach testen, ich habs grad nich im Kopf ob der Rest abgeschnitten wird oder was da sonst passiert.

5

28.11.2006, 10:20

jepp k

danke jedenfalls :)

mfg
Simon

6

28.11.2006, 21:45

so hab mich schlau gemacht :)

für suchfunktionsuser hier ne kurze erklärung.



mit cout.width(int);

sagt man wieviele zeichenketten im foglenden coutbefehl vorkommen sollen.

cout.fill(char);

füllt den stringt dann aus mit dem entsprechenden zeichen bis zum int wert von width.


dann gibts noch 3 "operatoren" right,left,insertant was angibt, ob der string recht , links oder zentralbündig ist (insertant hat bei mir irgendwie nichts bewirkt , war trotzdem rechtsbündig :( )


Bsp.:

C-/C++-Quelltext

1
2
3
cout.width(10);
cout.fill('X');
cout << right << 10;


ausgabe ist dann folgende

C-/C++-Quelltext

1
XXXXXXXX10


also dann :)

mfg

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

28.11.2006, 22:10

Zitat von »"Draculark"«

für suchfunktionsuser

Die sind nen urbaner Mythos ;)

Ne, sehr vorbildlich :)

Werbeanzeige