schon wieder palindrom
-
hey ho.
ich hab versucht, nen prog zu schreiben, was ein palindrom erkennt...leider tuts das nicht so... fällt wohl jmd nen fehler auf?//palindrom.cpp //function palindrom funktioniert nicht. #include <iostream.h> bool palindrom(int l, int r); void change(void); const int MAX = 100; //char satz[MAX] = {'E','i','n',' ','N','e','g','e','r',' ','m','i','t',' ','G','a','z','e','l','l','e',' ','z','a','g','t',' ','i','m',' ','R','e','g','e','n',' ','n','i','e','.'}; char satz[MAX] = {'O', 't', 't', 'o'}; char satz2[MAX]; int main(void) { int i=0; while(i <= MAX) { cout << satz[i] ; i++; } cout << endl; change(); i = 0; while(i <= MAX) { cout << satz2[i] ; i++; } cout << endl; if(palindrom(0,MAX)) cout << "Palindrom" << endl; else cout << "Kein Palindrom" << endl; return 0; }; bool palindrom(int l, int r) { if(satz2[l] == satz2[r]) { palindrom(l+1,r-1); } else if((l == r) | ((r-l == 2) && (satz2[l] == satz2[r]))) return true; else return false; } //Leerzeichen etc. entfernen. void change(void) { int d = 0; char zeichen; for(int i = 0;i < MAX; i++) { if(((satz[i] >= 65) && (satz[i] <= 90)) | ((satz[i] >= 97) && (satz[i] <= 122))) { if((satz[i] >= 97) && (satz[i] <= 122)) zeichen = satz[i] - 32; else zeichen = satz[i]; satz2[d] = zeichen; d++; } } }
also compilieren tut er es und erstellt auch die a.out (slack9.1) nur gibt palindrom immer nur 1(false) zurück.
danke schon mal im voraus
-
Kann es an dieser Zeile liegen:
else if((l == r) | ((r-l == 2) && (satz2[l] == satz2[r])))
Versuchs mal mit nem || anstelle eines Bitweise ODER Operators
Aber wieso hast du die change() Funktion ? Leerzeichen brauchst du doch nicht zu entfernen.
Ansonsten würde ich die Palindrom Aufgabe etwas kürzer fassen ungefähr so:bool isPalindrom(char characters[]) { int length = strlen(characters); int end = length - 1; int i; bool erg; for(i=0; i<=end; i++) { if (characters[i] == characters[end]) { end--; erg = true; } else { erg = false; break; } } return erg; }
Hab den Code allerdings nicht getestet, sollte aber gehen
Xecutor
-
erstmal danke.
werd ich gleich mal versuchen...
change, weil hier jmd anders das genau so gemacht hat (bzw die leerzeichen entfernt hat) und da ich da drüber halt auf die idee gekommen bin hab ichs halt auch so gemacht. außerdem ist ja z.b. "Ein Neger mit Gazelle zagt im Regen nie." soweit erstmal kein Palindrom, weil der Punkt und die Leerzeichen stören, nicht oder?
\edit: habs jez ganz anders gelöst. trotzdem danke.