Forum: Compiler & IDEs führende Leerzeichen aus String entfernen


von zotos (Gast)


Lesenswert?

Hallo,
gibt es in C eine fertige Funktion führende Leerzeichen aus einem
String zu entfernen?

von Karl H. (kbuchegg)


Lesenswert?

Nein.
Ist aber gar nicht so schwer zu programmieren.

Das Prinzip:
Das erste Nicht-Leerzeichen Zeichen im String suchen.
Danach alle Zeichen dahinter in einer Schleife nach
vorne kopieren.

von zotos (Gast)


Lesenswert?

Danke.

Das mit dem selbst Programmieren ist auch nicht das Problem. Ich wollte
nur nicht das Rat neu erfinden wenn es in irgend einer AVR-lib schon
drin ist ;o)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nö, ist so nicht da.

Meist genügt es ja, sich mit einem Pointer vorzuarbeiten und den
Anfang des Strings einfach zu ignorieren.  Damit entfällt dann
sogar noch der Schritt des Kopierens.

von Karl H. (kbuchegg)


Lesenswert?

Yep.
Das Hauptproblem warum man solche Dinge nicht in die
Library mit aufnimmt liegt wohl darin, dass jeder eine
andere Vorstellung davon hat, was den als Leerzeichen
gewertet wird. Ist das nur das eigentliche Leerzeichen oder
gehört der Tabulator auch dazu. Was ist mit einem Zeilenvorschub
am Beginn? Soll der ignoriert werden oder nicht?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dafür gibt es ja in C den netten Begriff "whitespace" ... und das
Macro/die Funktion isspace.

von zotos (Gast)


Lesenswert?

Zuerst dachte ich ja dieser Thread wäre sinnlos da ich das nein zu der
Frage nach einer fertigen Funktion schon erwartet habe. Nun nach den
Bemerkungen im Bezug auf Tabs, Zeilenvorschub (Whitspace) bin ich froh
die Frage gestellt zu haben, da ich genau diese Zeichen ja auch
ausblenden muss.

Nochmals Danke.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hier die Variante ohne Kopieren:
1
#include <ctypes.h>
2
3
char *
4
ltrimstr(char *s)
5
{
6
   char c;
7
8
   while ((c = *s++) != 0 && isspace(c))
9
      /* advance pointer */ ;
10
   return s;
11
}

von Karl heinz B. (kbucheg)


Lesenswert?

Da frag ich mich doch:
Was liefert eigentlich isspace für '\0'?

Könnte man das abkürzen zu

  while( isspace(*s++) )
    ;

von Karl heinz B. (kbucheg)


Lesenswert?

Hab ein bischen gegoogelt: müsste eigentlich klappen

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Was liefert eigentlich isspace für '\0'?

0, gehört nicht zu den white space characters.  Ja, damit
könnte man diesen Test wirklich noch weglassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.