www.mikrocontroller.net

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


Autor: zotos (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: zotos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: zotos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier die Variante ohne Kopieren:
#include <ctypes.h>

char *
ltrimstr(char *s)
{
   char c;

   while ((c = *s++) != 0 && isspace(c))
      /* advance pointer */ ;
   return s;
}

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Könnte man das abkürzen zu

  while( isspace(*s++) )
    ;

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ein bischen gegoogelt: müsste eigentlich klappen

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.