Brauche etwas Hilfe bei einem einfachen Programm



  • Hallo zusammen.
    Wollte grade dieses kleine Stück Code schreiben, welches überprüfen soll, ob ein Wort ein Palindrom ist oder nicht.
    Allerdings bekomme ich aus unerklärlichen Gründen einen Fehler beim Funktionsaufruf in der main-Routin. Diese sagt, die Funktion könne nicht gefunden werden.
    Vielen Danke schonmal für die Hilfe 🙂

    int main(void)
    {
    	int letztes,erstes=0;
    	char palindrom[20];
    	bool paliornot;
    
    	std::cin >> palindrom;
    
    	letztes=strlen(palindrom)-1;
    
    	paliornot = palitest(palindrom, erstes, letztes);
    
    	if (paliornot == true)
    	{
    		std::cout << "Das Wort ist ein Palindrom";
    	}
    	else
    	{
    		std::cout << "Das Wort ist kein Palindrom";
    	}
    
    	return 0;
    }
    
    bool palitest(char *c, int erstes, int letztes)
    {
    	if (c[erstes] == c[letztes] &&  erstes<letztes)
    	{
    		erstes =erstes + 1;
    		letztes =letztes - 1;
    		palitest(c, erstes, letztes);
    	}
    	else
    	{
    		return false;
    	}
    
    	return true;
    }
    


  • Wenn im zweiten Kapitel der Gärtner die Hausherrin umbringt ... weißt Du das dann in Zeile 11 schon? Zumindest die Deklaration muss da schon bekannt sein.



  • mensch, da war ich ja mal wieder voll verpeilt 😃
    danke dir 🙂



  • Benutze std::string, nicht char Arrays und strlen!



  • Cro0wley schrieb:

    mensch, da war ich ja mal wieder voll verpeilt 😃
    danke dir 🙂

    Genau wie beim Wählen der Rückgabewerte in deiner bool-Funktion. So wie es da steht, ist es mehr als hirnrissig...



  • Ich sehe das immer wieder. Wo lernt man eigentlich das man, wenn man keine Parameter übergeben möchte, in C++

    returnValue function(void)
    

    schreibt. Das scheint sich ja hartnäckig zu halten.



  • Vermutlich da, wo man char palindrom[20] statt std::string lernt.



  • Das lernt man von C-Entwicklern, die C++ zu schreiben versuchen. Dagegen hilft:

    run-clang-tidy-7.py -checks='-*,modernize-redundant-void-arg' -fix  /path/to/source
    

    🙂

    Wenn ich außerdem drüber nachdenke, sollte das mit std::equal gehen.

    bool isPalindrome(const std::string &s) {
        return std::equal(s.begin(), s.begin() + s.size()/2, s.rbegin());
    }
    

    Zumindest wenn ich das mit dem /2 und (un)geradelängigen Strings richtig habe 😉