Gibt einen Teil einer Zeichenfolge in C aus

Lesezeit: 3 Minuten

Marks Benutzeravatar
Markieren

Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge zu drucken?

Zum Beispiel, wenn ich habe

char *str = "hello there";

Gibt es eine Möglichkeit, einfach zu drucken "hello"wobei zu beachten ist, dass die Teilzeichenfolge, die ich drucken möchte, eine variable Länge hat, nicht immer 5 Zeichen?

Ich weiß, dass ich a gebrauchen könnte for Schleife und putchar oder dass ich das Array kopieren und dann einen Nullterminator hinzufügen könnte, aber ich frage mich, ob es einen eleganteren Weg gibt?

  • Was ist der Charakter oder das Kriterium, bei dem Sie aufhören möchten? es ist schwer, diese Frage ohne Klärung zu beantworten

    – kelloti

    30. Januar 2011 um 4:55 Uhr

Versuche dies:

int length = 5;
printf("%*.*s", length, length, "hello there");

  • @SiegeX: Yup – Hinzufügen der include <stdio.h>\nintmain(void)\n{ warst du dabei… 🙂

    – Jerry Sarg

    30. Januar 2011 um 4:59 Uhr

  • Wenn er natürlich auf stderr oder eine Datei oder auf ein Etikett in einer GUI drucken möchte, klassisch printf wird nicht helfen. Vielleicht notieren Sie sich auch sprintf/fprintf?

    – Chris Charabaruk

    30. Januar 2011 um 5:02 Uhr


  • @Chris Charagaruk: Ganz richtig – aber angesichts dessen, dass er es erwähnt hat putcharDrucken an stdout schien sinnvoll.

    – Jerry Sarg

    30. Januar 2011 um 5:04 Uhr

  • @Chria Charabaruk: Ganz richtig – aber ich neige dazu anzunehmen, dass er auch erkennt, dass sprintf, fprintf usw. alle dieselbe Formatierung wie printf verwenden …

    – Jerry Sarg

    30. Januar 2011 um 5:12 Uhr

  • printf("%.*s", length, "hello there") wird es auch tun — das erste * bedeutet nur, dass ein Sub-length string wird aufgefüllt length Zeichen, die das gewünschte Verhalten sein können oder nicht.

    – Benutzer295691

    31. Dezember 2012 um 21:11 Uhr

Das wird auch funktionieren:

fwrite(str, 1, len, stdout);

Es wird nicht den Overhead haben, den Formatbezeichner zu parsen. Um den Anfang des Teilstrings anzupassen, können Sie natürlich einfach den Index zum Zeiger hinzufügen.

  • obwohl ich Liebe verwenden printf-Formatierung, dies ist die einfachste und eleganteste Antwort.

    – dummydev

    19. Februar 2016 um 11:00 Uhr

Benutzeravatar von Chris Charabaruk
Chris Charabaruk

Sie können verwenden strncpy um den Teil Ihrer Zeichenfolge zu duplizieren, den Sie drucken möchten, aber Sie müssen darauf achten, ein Null-Terminator hinzuzufügen, as strncpy wird dies nicht tun, wenn es in der Quellzeichenfolge keine findet. Eine bessere Lösung, wie Jerry Coffin betonte, ist die Verwendung des Angemessenen *printf Funktion zum Ausschreiben oder Kopieren der gewünschten Teilzeichenfolge.

Während strncpy kann in den Händen von jemandem, der nicht daran gewöhnt ist, gefährlich sein, es kann in Bezug auf die Ausführungszeit im Vergleich zu a schneller sein printf/sprintf/fprintf -Stil-Lösung, da es keinen Overhead gibt, sich mit den Formatierungsstrings zu befassen. Mein Vorschlag ist zu vermeiden strncpy wenn Sie können, aber es ist gut zu wissen, nur für den Fall.

size_t len = 5;
char sub[6];
sub[5] = 0;
strncpy(sub, str + 5, len); // char[] to copy to, char[] to copy from(plus offset
                            // to first character desired), length you want to copy

Druckf und Freunde funktionieren gut, wenn das alles ist, was Sie mit der Teilzeichenfolge tun möchten, aber für eine allgemeinere Lösung:

char *s2 = s + offset;
char c = s2[length]; // Temporarily save character...
s2[length] = '\0';   // ...that will be replaced by a NULL
f(s2);  // Now do whatever you want with the temporarily truncated string
s2[length] = c;      // Finally, restore the character that we had saved

1432950cookie-checkGibt einen Teil einer Zeichenfolge in C aus

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

Privacy policy