Palindrom - true oder false?
-
Hallo!
Habe mal wieder ein Problem bei einer Aufgabe. Und zwar soll ein Programm geschrieben werden, welches vom Benutzer ein Wort oder eine Zahl einliest, entscheidet, ob es sich dabei um eine Palindrom (z.B. otto, abccba, 123321) handelt oder nicht und entsprechend "true" oder "false" ausgibt. Leider gibt mein Programm, unabhängig von der Eingabe, immer "true" aus...!

Wahrscheinlich liegts mal wieder an einem blöden Anfängerfehler, den ich schon seit Stunden erfolglos suche. Kann mir jemand helfen? Hier der Code:#include <iostream> #define BUF 80 using namespace std; main() { int Zaehler=0, a=0, b=0, var=0; char Zeichenkette[BUF]; bool Palindrom=true; cout << "Bitte Zeichenkette eingeben: "; cin >> Zeichenkette; for( int z=0; z<BUF && Zeichenkette[z]!='\0'; z++ ) { Zaehler=Zaehler+1; } for ( int a=0, b=0; a<b && Palindrom==true; a++, b-- ) { if ( (Zeichenkette[a]==Zeichenkette[Zaehler-(1+b)]) == false ) { Palindrom=false; } } if( Palindrom == true ) { cout << "true"; } else { cout << "false"; } return 0; }
-
statt
for ( int a=0, b=0; a<b && Palindrom==true; a++, b-- ) { if ( (Zeichenkette[a]==Zeichenkette[Zaehler-(1+b)]) ==lieber
for ( int a=0, b=0; a<Zaehler/2 && Palindrom==true; a++, b++ ) { if ( (Zeichenkette[a]==Zeichenkette[Zaehler-(1+b)]) ==, oder?
Aber das Fehlerchen riecht danach, daß Du eigentlich denken wolltest, daß a von links und b von rechts aufeinander zulaufen.
Mach das doch so!for ( int a=0, b=Zaehler-1; a<b && Palindrom==true; a++, b-- ) { if ( (Zeichenkette[a]==Zeichenkette[b]) ==
-
oh mann, natürlich!! vielen dank! nach stunden tüftelei sieht man wirklich den wald vor lauter bäumen nicht und machts alles komplizierter als es eigentlich ist!

-
newbie007 schrieb:
#include <iostream> #define BUF 80Du brauchst für solche Konstanten den Preprocessor nicht. Es geht auch mit
const int bufsize = 80;newbie007 schrieb:
main() {Funktionen haben einen Rückgabe-Typen. Der von main ist int.
newbie007 schrieb:
int Zaehler=0, a=0, b=0, var=0; char Zeichenkette[BUF]; bool Palindrom=true; cout << "Bitte Zeichenkette eingeben: "; cin >> Zeichenkette;Siehe Pufferüberlauf
Ich schlage folgendes Programmgerüst vor:
#include <iostream> #include <iomanip> #include <string> using namespace std; bool istPalindrom(string const& x) { ... } int main() { cout << "Wort eingeben: "; string wort; cin >> wort; bool p = istPalindrom(wort); cout << boolalpha << p << '\n'; }Außerdem:
((a == b) == true) ist äquivalent zu (a == b) ((a == b) == false) ist äquivalent zu (a != b)(zumindest für skalare Typen von a und b)
Gruß,
SP