Leerzeichen, Tabs und Satzzeichen bei Eingabe ignorieren // Palindromprobleme
-
Hallo Gemeinde...
Sicher einfach, aber ich komm nicht drauf. Also hier mein Code:
#include <stdio.h> #include <ctype.h> #include <string.h> int main () { char z[255],umkehr[255]; int i,laenge; /*Zeichenkette eingeben und einlesen*/ printf ("Bitte den Text eingeben: (max Laenge: 255 Zeichen)\n"); gets(z); //Wohl besser: fgets(z, 255, stdin); /*Laenge der Zeichenkette wird ermittelt*/ laenge = strlen(z); if (laenge>255) return 1; /*Rueckwaerts ausgeben*/ for(i=0;i<laenge;i++) umkehr[i]=z[laenge-1-i]; umkehr[laenge]='\0'; /*Ausgabe der Zeichenkette und der Laenge*/ printf("Umkehrung:\t%s\n",umkehr); printf("Die Laenge der Zeichenkette betraegt: %d Zeichen\n",laenge); return 0; }
So, funktioniert auch aber die Leerzeichen, Tabs etc sollen nicht eingelesen werden...
Also quasi wenn ich "Hallo Welt ich bins" eingebe, soll nur "HalloWeltichbins" im Array gespeichert werden.
Wie kann ich das bewerkstelligen????
-
king-al schrieb:
... for(i=0;i<laenge;i++) umkehr[i]=z[laenge-1-i]; umkehr[laenge]='\0'; ...
tauschen gegen:
for(i=0; laenge>0; umkehr[i]=z[laenge]) if (isalpha(z[laenge--])) i++;
-
Danke!!! Das hat schomal funktioniert, aber ich hab trotzdem noch Probleme:
Das Programm soll also auch Sätze einlesen können (ohne Satz, Leerzeichen usw) um vergleichen zu können ob es sich um ein Palindrom handelt oder nicht.
Das mit dem Vergleich hatte ich heute auch schon richtig hinbekommen, aber durch das viele rumbasteln ist mir meine eigene Lösung wieder abhanden gekommen und ich krieg es nicht nochmal hin.
Das Ding ist, dass die Umkehrung anscheinend richtig ausgegeben wird, jedoch die Umkehrung der Umkehrung (also für den Vergleich) irgendwie fehlerhaft ist. Bitte compiliert das doch selbst mal und versucht es mit (hallo) (hallo hallo) etc. ihr werdet sehen was ich meine. Der Vergleich klappt selbst bei ("Otto") nicht...
Das mit der "doppelten" umkehrung war nötig, da ich den satz ja ohne leerzeichen vergleichen muss....
Habe mich bemüht alles mit Kommentaren zu versehen
#include <stdio.h> #include <ctype.h> #include <string.h> int main () { char eingabe[255],umkehr[255],ausgabe[255]; int i,laenge; printf ("Bitte den Text eingeben: (max Laenge: 255 Zeichen)\n"); fgets(eingabe, 255, stdin); laenge = strlen(eingabe); if (laenge>255) return 1; /*Eingabe wird mittels tolower in kleine Buchstaben umgewandelt und wieder in "eingabe" gespeichert*/ for(i=0;i<laenge;i++) eingabe[i]=tolower(eingabe[i]); //eingabe[laenge]='\0'; /*Die jetzt kleinen Buchstaben werden umgekehrt und in "umkehr" gespeichert*/ for(i=0; laenge>0; umkehr[i]=eingabe[laenge]) if (isalpha(eingabe[laenge--])) i++; /*Die Laenge wird auf die des "umkehr" Felds gesetzt*/ laenge = strlen(umkehr); /*Jetzt wird der "umkehr" Array wieder zurueckgewandelt und in "ausgabe" gespeichert, um spaeter einen Vergleich zu ermoeglichen */ for(i=0; laenge>0; ausgabe[i]=umkehr[laenge]) if (isalpha(umkehr[laenge--])) i++; /*"umkehr" und "ausgabe" werden gedruckt*/ printf("Ausgabe: \t\"%s\"\n",ausgabe); printf("Umkehrung:\t\"%s\"\n",umkehr); /*Die Arrays werden verglichen und es wird festgestellt, ob es sich um ein Palindrom handelt oder nicht*/ int ret = strcmp (ausgabe,umkehr); if(ret == 0) printf("Der Satz ist EIN Palindrom!!!\n"); else printf("Der Satz ist KEIN Palindrom!!!\n"); return 0; }
Danke schonmal, Leute!!!
-
king-al schrieb:
Das mit dem Vergleich hatte ich heute auch schon richtig hinbekommen, aber durch das viele rumbasteln ist mir meine eigene Lösung wieder abhanden gekommen und ich krieg es nicht nochmal hin.
nach dir subversion o.ä. drauf und dann öfters mal einchecken das ganze
btw,
int is_palindrome (char *s) { int len = strlen(s); int i; for (i=0; i<len/2; i++) if (s[i] != s[len-i-1]) return 0; // nein return 1; // ja } int main () { char eingabe[255]; start: gets(eingabe); if(is_palindrome(eingabe)) printf("Der Satz ist EIN Palindrom!!!\n"); else printf("Der Satz ist KEIN Palindrom!!!\n"); goto start; }
-
aaaaaaaalso, danke nochmal ihr beiden!!!
Hat mir gut weitergeholfen und jetzt kann ich beruhigt in die neue Woche starten!!!
Vielen Dank,
king-al =+
+
-
king-al schrieb:
danke nochmal ihr beiden!!!
ach nö, jetzt werde ich schon schizophrenie verdächtigt