Ganz blöde Frage: Leerzeichen entfernen?

jccTeq

Erfahrenes Mitglied
Morgähn!

Per Suche hatte ich keinen Erfolg, darum stell ich die Frage einfach mal... so blöd sie auch sein mag, man vergisst beim Entwickeln komplexester Programme schnell mal das Einfachste vom Einfachen.

Wie entfernt man führende und abschließende Leerzeichen in einem String in C++? Dabei darf das sowohl ein Character Array als auch ein Ansi-String sein. Das ist mir egal. In C# gibts dafür die Funktion trim, welche es auch in diversen anderen Programmiersprachen gibt, jedoch konnte ich in C++ nix davon finden. Gibts da sowas auch? Oder muss ich das selber implementieren (wie so vieles andere auch)?

Danke!

Gruß,
Hendrik
 
Ich wüsste keine Funktion die das macht, daher würde ich den String in ein Char[] konvertieren, und dann von char[0] und char[strlen(char)] nachschaun ob da ein ' ' ist, wenn ja einfach um 1 nach links verschieben, oder das letzte Zeichen gegen '\0' ersetzten, wieder zurückkonvertieren nach String und fertig biste...

Oder muss ich das selber implementieren (wie so vieles andere auch)?
Kann ja nicht alles schon fertig sein, sonst könnte ja jeder nach dem Baukastenprinzip programmieren ;)
 
moin


Code:
char mit[100]={"Leerzeichen sollen entfernt werden !"};
char ohne[100];

for( int i=0; i<strlen(mit); i++)
{
     if(mit[i] != ' ')
          ohne[l++] = mit[i];
}

Sollte funktionieren, hab es aber nciht getestet.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Variante
Code:
char mit[100]={"Leerzeichen sollen entfernt werden !"};
char ohne[100];

for( ;*mit!='\0' ; mit++)
{
     if(!isspace(mit))   /* ist in ctype.h definiert */
          *ohne++ = *mit;
}
 
Hi, hab da ein paar Sachen vergessen zu erlaeutern, a - die Zeigerversion funktioniert so nur in einer Funktion/da es sonst mit den Vektortyp kollidiert. Ausserdem musste natuerlich noch mit '\0' abschliessen. Also (getestet) :
Code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void remove_space(char *,char *);

int main()
{
   char mit[100]={"Leerzeichen sollen entfernt werden !"};
   char ohne[100];

   remove_space(mit,ohne);
   printf("%s\n",ohne);
   return 0;
}

void remove_space(char *s, char *t) {
   for( ;*s!='\0' ;s++) {
     if(!isspace(*s))   /* ist in ctype.h definiert */
          *t++ = *s;
     }
     *t='\0';
}

und noch eine Variante fuer die Remove Space Funktion mit nur einem Uebergabeparameter -- der Source String wird direkt veraendert.

Code:
void remove_space(char *s) {
   char *tmp;
   tmp=s;
   for( ;*s!='\0' ;s++) {
     if(!isspace(*s))   /* ist in ctype.h definiert */
          *tmp++ = *s;
     }
     *tmp='\0';
}
 
Zuletzt bearbeitet:
Wieso lässt du die Funktion nicht einfach einen Pointer auf das erste Zeichen, das kein Whitespace ist, zurückgeben?
Code:
char *ltrim(char *s)
{
    while (*s && *s <= 32)
        s++;

    return s;
}

/* ... */
printf(":%s:\n", ltrim("    foobar"));
Die erste Bedingung der While Schleife sorgt dafüer, dass \0 nicht als Whitespace erkannt wird (= Ende des Strings, da ist s++ keine gute Idee :p)
 
Zuletzt bearbeitet von einem Moderator:
Die Frage war:
Wie entfernt man führende und abschließende Leerzeichen in einem String in C++?
Sprich: Alle Leerzeichen im gesamten String entfernen ist nicht das, was jccTeq wollte.

Ausserdem braucht man bei deiner Lösung noch ein zweites Array.
 
Zurück