String weiter verarbeiten



  • Ich möchte einen string[80] nach Kommas durchsuchen und alle Kommas mit Leerzeichen überschreiben. Die Funktion strchr liefert mir die Position des ersten Kommas. Ich will aber den restlichen String bis zum Ende durchsuchen und auch alle anderen Kommas überschreiben.
    Mir ist nicht klar, wie ich a) weitersuchen kann und b)Über den zeiger, den strchr zurückliefert den "Wert", also das Komma mit einem Space überschreiben kann.

    Beispielcode:

    int main(void) {  
     char str[] = "Ein String, mit Kommas, ist gut";
    printf("%s\n",strchr(str, (int)','));   
    return EXIT_SUCCESS;}
    

    Kann mir jemand helfen? Danke


  • Mod

    Schreib dir das am einfachsten selbst: Schleife über den String bis das aktuelle Zeichen \0 ist. Dabei alle Kommas mit Leerzeichen ersetzen.



  • for(char* p = str; *p; ++p)
        if(*p == ',')
            *p = ' ';
    


  • if (lerneffekt) applause();
    

    *STILLE*



  • prog.c:3: error: ‘lerneffekt’ undeclared (first use in this function)
    prog.c:3: error: (Each undeclared identifier is reported only once
    prog.c:3: error: for each function it appears in.)
    prog.c:4: warning: implicit declaration of function ‘applause’



  • Kein Thema:

    unsigned int lerneffekt;
    void applause();
    int main (void)
    {
       if (lerneffekt) 
          applause();
       return lerneffekt;
    }
    

    Dann ist aber sowas von Stille 🙂



  • /home/DFYB3S/cczshee9.o: In function main': prog.c:(.text+0x18): undefined reference toapplause'
    collect2: ld returned 1 exit status



  • Scherzbolde.

    Was das eigentliche Problem angeht, strchr gibt dir ja einen Zeiger auf das Komma zurück, das du ersetzen willst. Durch diesen Zeiger kannst du es dann überschreiben. Probier mal

    char *p = strchr(str, ',');
    *p = ' ';
    puts(str);
    

    Danach lässt sich der so gefundene Zeiger wieder als String interpretieren und erneut an strchr verfüttern (es ginge hier prinzipiell auch, str erneut zu durchsuchen, weil das erste Komma ja jetzt entfernt wurde, aber das Laufzeitverhalten dieses Vorgehens ist unnötig langsam). In einer Schleife sieht das dann beispielsweise so aus:

    char *p;
    
    for(p = strchr(str, ','); p != NULL; p = strchr(p, ',')) {
      *p = ' ';
    }
    


  • siehe 314159265358979's Antwort von 13:30 🙂


Anmelden zum Antworten