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 80
    

    Du 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


Anmelden zum Antworten