Mehrere Leerzeichen aus char-array entfernen.
-
ohaoha schrieb:
Das j++ aus dem Schleifenkopf raus und dann so:
ausgabe[j++] = eingabe[i];
ähm... nein
jetzt behandelt er zwar den fall von "mehr als 2 leerzeichen" korrekt, aber 2 leerzeichen werden nun zu GARKEINEM leerzeichen.
-
Moin Jungs und Mädels, ist grade nix los...mal n büschen proggen.
Vielleicht hat ja auch jemand einen Denkanstoss wie ich mir mein "Hilfsarray" (ausgabe[]) sparen kann.
#include <string.h> int main() { int i = 0, j = 0; char str[] = "Wo sind die vielen " " unnuetzen Leerzeichen geblieben ?"; while( str[i] ) { while( str[i] == ' ' && str[i+1] == ' ' ) i++; memmove ( str + j, str + i, 1 ); j++; i++; } while ( j < i ) str[j++] = '\0'; puts(str); }
Wünsche noch nen sonnigen Tag
-
proggingmania schrieb:
Moin Jungs und Mädels, ist grade nix los...mal n büschen proggen.
memmove für 1 zeichen zu nehmen ist ja sowas von uncool
...und wieso haust du am schluss die ganzen nullen rein?
-
pale dog schrieb:
memmove für 1 zeichen zu nehmen ist ja sowas von uncool
Wenn ich cool sein will, leg ich mich ins Gefrierfach.
Memmove achtet auch sich überlappende Bereiche im Speicher.pale dog schrieb:
...und wieso haust du am schluss die ganzen nullen rein?
Um die restliche Grütze, die überbleibt, unsichtbar zu machen. Ok eine Null reicht.
-
proggingmania schrieb:
Memmove achtet auch sich überlappende Bereiche im Speicher.
das ist bei nur einem zeichen natürlich ganz besonders wichtig
mach mal aus der memmove-zeile: str[j] = str[i];
ich wette das geht auch...
-
das ist bei nur einem zeichen natürlich ganz besonders wichtig
Ok, das war wohl Stuss von mir.
mach mal aus der memmove-zeile: str[j] = str[i];
Ja, das geht auch.
-
#include <stdio.h> // Improved edition. int main() { int i = 0, j = 0; char str[] = "Wo sind die vielen " " unnuetzen Leerzeichen geblieben ?"; while( str[i] ) { while( str[i] == ' ' && str[i+1] == ' ' ) i++; str[j++] = str[i++]; } if ( j < i ) str[j] = '\0'; puts(str); return 1; }
-
proggingmania schrieb:
... if ( j < i ) str[j] = '\0'; ...
das 'if ( j < i )' kannste auch noch weglassen
-
das 'if ( j < i )' kannste auch noch weglassen
Nee, sonst wird der ganze Müll der noch dranhängt mit ausgegeben.
-
proggingmania schrieb:
das 'if ( j < i )' kannste auch noch weglassen
Nee, sonst wird der ganze Müll der noch dranhängt mit ausgegeben.
nur das if(...) soll weg, das str[j] = '\0'; natürlich nicht.
-
Kurze Zwischenfrage: ist
str[i] = '\0';
identisch mit
str[i] = 0;
?
-
Ike schrieb:
Kurze Zwischenfrage: ist
str[i] = '\0';
identisch mit
str[i] = 0;
?
JA