char --> Alles vor Leerzeichen löschen



  • Hallo zusammen,

    ich habe einen char der Beispielweise so aussieht:

    In

    340 322 123 434 233

    Nun möchte ich gerne alles vor dem ersten Leerzeichen löschen. Wie kann ich hier am besten vorgehen ?

    Out

    322 123 434 233

    Grüße,
    Radeon



  • Wenn der String in-place geändert werden muss, bietet sich eine Kombination von strchr und memmove an:

    char foo[] = "1 2 3 4 5";
    
    char *p = strchr(foo, ' ');
    if(p) {
      memmove(foo, p + 1, strlen(p));
    } else {
      /* String enthält keine Leerzeichen */
    }
    

    Unter Umständen kann man sich diese Arbeit aber auch sparen - wenn es nur um Lesezugriff geht, dürfte es möglich sein, statt des ursprünglichen Strings einfach einen Zeiger hinter das erste Leerzeichen zu benutzen.



  • Wie seldon bereits geschrieben hat, kann man dies auch mittels Pointer Arithmetik Lösen:

    int main (void)
    {
        char string[50]="340 322 123 434 233";
        char *pScanner=NULL;
    
        pScanner=&string[0];
        while(*pScanner!=' ')
            pScanner++;
        pScanner++;
        printf("%s\n",pScanner);
        return 0;
    }
    


  • transcend schrieb:

    int main (void)
    {
        char string[50]="340 322 123 434 233";
        char *pScanner=NULL;
    
        pScanner=&string[0];
        while(*pScanner!=' ')
            pScanner++;
        pScanner++;
        printf("%s\n",pScanner);
        return 0;
    }
    

    Mein Grünschnabelvorschlag wäre:

    int main (void)
    {
       char string[50]="340 322 123 434 233";
       char *p=string;
    
       while ( *(++p) != ' ');
       puts (++p);
    
       return 0;
    }
    

    Sollte eigentlich auch funzen oder?



  • Wenn du es ausprobiert hättest -> nein, das funktioniert nicht. Sobald das erste Leerzeichen auftritt wird deine Ausgabe beendet. Außerdem steht hier nirgends, dass er den String ausgeben möchte.

    MfG SideWinder



  • SideWinder schrieb:

    Wenn du es ausprobiert hättest -> nein, das funktioniert nicht. Sobald das erste Leerzeichen auftritt wird deine Ausgabe beendet. Außerdem steht hier nirgends, dass er den String ausgeben möchte.

    MfG SideWinder

    Da steht ein hinterlistiges Semikolon nach der while-Schleife 🤡
    Und mit der Ausgabe habe ich mich nur an transcend orientiert...

    Der Fragensteller schien eher die memmove-Lösung zu suchen...



  • @ChrisIT

    Was machste denn wenn das erste Zeichen ein Leerzeichen ist? 😃

    while (*p++ != ' ')
      ;
    puts(p);
    


  • Dann schieb ichs auf die falsche Anforderung bzw. falsch formatierte Daten 🙂


Anmelden zum Antworten