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 derelse
-Zweig des vorherigenif
.Dann solltest du auch sagen, was denn genau eigentlich "nicht funktionieren kann".
Ansonsten wäre es einfacher, einfach
satz
durchzugehen und immer nur Zeichen !=' '
inneuer_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.