Linker Tampondruck mit Leerzeichen

Lesezeit: 4 Minuten

Benutzeravatar von titaniumdecoy
Titanköder

Wie kann ich eine Zeichenfolge mit Leerzeichen auf der linken Seite auffüllen, wenn ich printf verwende?

Zum Beispiel möchte ich “Hallo” mit 40 Leerzeichen davor drucken.

Außerdem besteht die Zeichenfolge, die ich drucken möchte, aus mehreren Zeilen. Muss ich jede Zeile einzeln drucken?

BEARBEITEN: Nur um klar zu sein, ich möchte, dass vor jeder Zeile genau 40 Leerzeichen gedruckt werden.

Benutzeravatar von Bill the Lizard
Bill die Eidechse

Wenn Sie möchten, dass das Wort „Hallo“ in einer Spalte mit einer Breite von 40 Zeichen und Leerzeichen auf der linken Seite gedruckt wird, verwenden Sie Folgendes.

char *ptr = "Hello";
printf("%40s\n", ptr);

Das gibt Ihnen 35 Leerzeichen, dann das Wort “Hallo”. So formatieren Sie Dinge, wenn Sie wissen, wie breit die Spalte sein soll, aber die Daten sich ändern (na ja, es ist eines wie du es machen kannst).

Wenn Sie wissen, dass Sie genau 40 Leerzeichen und dann etwas Text benötigen, speichern Sie die 40 Leerzeichen in einer Konstante und drucken Sie sie aus. Wenn Sie mehrere Zeilen drucken müssen, verwenden Sie entweder multiple printf Anweisungen wie die obige, oder machen Sie es in einer Schleife, indem Sie den Wert von ändern ptr jedes Mal.

  • weiß nicht zu viel über Format-Flags. aber ich vermute printf(“%40s%s\n”, “”, ptr); kann verwendet werden, um es auch mit 40 Leerzeichen aufzufüllen?

    – Johannes Schaub – litb

    16. November 2008 um 4:06 Uhr

  • Ja, das würde Ihnen immer 40 Leerzeichen vor dem Inhalt des Zeigers geben. Das ist eine nette Lösung, aber wenn Sie es viel tun müssen, denke ich, dass eine Konstante mit 40 Leerzeichen schneller wäre. Ich weiß nicht, ob der Compiler printf-Formate optimieren kann.

    – Bill die Eidechse

    16. November 2008 um 4:13 Uhr

  • Wenn Sie eine int-Variable ‘n’ haben, die die Anzahl der einzufügenden Leerzeichen enthält, können Sie außerdem Folgendes verwenden: printf(“%*s%s\n”, n, “”, ptr); um eine variable Anzahl von Leerzeichen zu erhalten.

    – Jonathan Leffler

    16. November 2008 um 4:37 Uhr

  • Und um den letzten Teil der Frage anzusprechen: Ja, wenn Sie möchten, dass jede Datenzeile mit 40 führenden Leerzeichen gedruckt wird, müssen Sie die Daten segmentieren, sodass jede Zeile separat gedruckt wird.

    – Jonathan Leffler

    16. November 2008 um 4:38 Uhr

  • @Jonathan Leffler: Natürlich kann der Compiler printf-Formate optimieren. Beispielsweise optimiert GCC printf(“%s\n”, foo) und ersetzt es durch puts(foo).

    – sam hocevar

    10. Januar 2010 um 1:16 Uhr

Benutzeravatar von jk_
jk_

Ich verwende diese Funktion, um meine Ausgabe einzurücken (z. B. um eine Baumstruktur zu drucken). Das indent ist die Anzahl der Leerzeichen vor der Zeichenfolge.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

  • Ich mag Ihre Verwendung der String-Literal-Verkettung, um die Einrückung vom Rest des printf-Formats getrennt zu halten. Ein Vorschlag: Verwenden Sie eine leere Zeichenfolge anstelle eines einzelnen Leerzeichens für die Einrückungszeichenfolge. Auf diese Weise funktioniert indent == 0 wie erwartet. (dh, printf(..., indent, "", ...))

    – ɲeuroburɳ

    4. August 2015 um 15:36 Uhr

  • Beachten Sie, dass Ray Hulha die String-Literal-Verkettung entfernt hat, offensichtlich um ein “Compiler-Problem” zu beheben.

    – mwfearnley

    1. Oktober 2017 um 14:03 Uhr

Benutzeravatar von Rece Foc
Empfang Foc

int space = 40;
printf("%*s", space, "Hello");

Diese Anweisung reserviert eine Zeile mit 40 Zeichen und gibt eine Zeichenfolge am Ende der Zeile aus (wobei zusätzliche Leerzeichen entfernt werden, sodass die Gesamtlänge der Zeile bei 40 konstant bleibt). Dasselbe kann für Zeichen und ganze Zahlen wie folgt verwendet werden:

printf("%*d", space, 10);
printf("%*c", space, 'x');

Diese Methode, die einen Parameter zum Bestimmen von Leerzeichen verwendet, ist nützlich, wenn eine variable Anzahl von Leerzeichen erforderlich ist. Diese Anweisungen funktionieren weiterhin mit Integer-Literalen wie folgt:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

Hoffe, das hilft jemandem wie mir in Zukunft.

  • ich habe error: empty character constant zum ''. Sollte es nicht sein ' '?

    – Jinkwon

    6. Juni 2018 um 6:24 Uhr


  • Ja, das sollte es.

    – Scheff

    3. Dezember 2018 um 0:53 Uhr

  • @JinKgewann jeden Charakter, genauso "Hello" könnte alles sein, er hätte ein Beispiel nehmen sollen

    – Joe Pelletier

    3. März 2019 um 20:57 Uhr

Benutzeravatar von SoapBox
Seifenkiste

Wenn Sie genau 40 Leerzeichen vor der Zeichenfolge möchten, sollten Sie einfach Folgendes tun:

printf("                                        %s\n", myStr );

Wenn das zu schmutzig ist, können Sie Folgendes tun (aber es wird langsamer sein, als die 40 Leerzeichen manuell einzugeben):
printf("%40s%s", "", myStr );

Wenn Sie möchten, dass die Zeichenfolge in Spalte 40 aufgereiht wird (d. h. bis zu 39 Leerzeichen haben, so dass das Zeichen ganz rechts in Spalte 40 steht), dann tun Sie dies:
printf("%40s", myStr);

Sie können auch “bis zu” 40 Leerzeichen nach der Zeichenfolge einfügen, indem Sie Folgendes tun:
printf("%-40s", myStr);

1424030cookie-checkLinker Tampondruck mit Leerzeichen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy