Aus einem sting alle Leerzeichen löschen?



  • Hallo da bin ich mal wieder mit einem anderen Programm: Das Pogramm soll mir ganz einfach alle Leerzeichen in einem Satz verschwinden lassen. D.h. aus HALLO DU ---> HALLODU. Ich versteh nicht wieso das so nicht funktionieren kann. Bitte um Hilfe und danke im voraus!

    char satz[100];
        char neuer_satz[100];
        int i;
        printf("Enter: ");
        gets(satz); printf("\n");
        anzahl=strlen(satz);
        printf("Original: %s\n\n", satz);
    
            while(i != anzahl+1)
            {
    
                if(satz[i]== ' ')
                {
                    neuer_satz[i]=satz[i+1];
                    i=i+2;
                }
                if(satz[i] != ' ')
                {
                    neuer_satz[i]=satz[i];
                    i++;
                }
    
            }
        printf("Ohne Leerzeichen: %s", neuer_satz);
    


  • i hat keinen Wert zu Beginn der Schleife. Dein Compiler sollte da eigentlich meckern.

    Das zweite if ist zudem unnötig: das ist genau der else -Zweig des vorherigen if .

    Dann solltest du auch sagen, was denn genau eigentlich "nicht funktionieren kann".

    Ansonsten wäre es einfacher, einfach satz durchzugehen und immer nur Zeichen != ' ' in neuer_satz zu schreiben:

    int j = 0;
    for (i = 0; i < anzahl + 1; ++i) {
    /* Wieso nutzt du eine while-Schleife?
       Die Abfrage anzahl + 1 != i in deiner while-Schleife birgt auch noch ein
       anderes Problem (siehst du, welches?) */
      if (satz[i] != ' ')
        neuer_satz[j++] = satz[i];
    }
    


  • char satz[100]; 
        char neuer_satz[100]; 
        int i, anzahl, j = 0; 
        printf("Enter: "); 
        gets(satz); printf("\n"); 
        anzahl=strlen(satz); 
        printf("Original: %s\n\n", satz); 
    
        for(i = 0; i < anzahl + 1; ++i)
    	{
            if(satz[i] != ' ') 
            { 
                neuer_satz[j]=satz[i]; 
                ++j; 
            } 
        }
    
        printf("Ohne Leerzeichen: %s", neuer_satz);
    


  • int i = 0;
    int i1 = 0;
    
    ....
    
    while(satz[i]
    {
       if(satz[i] != ' ')
          neuer_satz[i1++] = satz[i];
    
       ++i;
    }
    neuer_satz[i1] = 0;
    


  • Danke an allen für die schnellen Antworten! Jetzt funkts.

    @@Knecht Ruprecht
    Ich nehme an das anzahl +1 schmeckt ihm nicht so recht !?



  • Annahme: i = anzahl und satz[i] = ' '

    Dann ist i != anzahl+1, du gehst in den if-Zweig rein wegen ' ' und rechnest i=i+2
    Dann ist i = anzahl+2, du bist eigentlich fertig, merkst es aber nicht da anzahl+2 != anzahl+1 ist.

    Also besser auf nicht auf != in einer Schleife testen.



  • Benutze für deinen Anwendungsfall memmove und du brauchst keinen zweiten Speicherbereich sondern arbeitest im Original.



  • Da braucht er nicht mal memmove.

    if (satz[i] != ' ')
        satz[j++] = satz[i];
    

    reicht da schon.


Anmelden zum Antworten