Ваша функция слишком сложна.Параметр должен иметь постоянный ссылочный тип, а функция должна возвращать логическое значение.
Ниже приведена демонстрационная программа, которая показывает, как функция может выглядеть с использованием цикла.
#include <iostream>
#include <iomanip>
#include <string>
bool is_palindrome( const std::string &s )
{
std::string::size_type i = 0, n = s.length();
while ( i < n / 2 && s[i] == s[n - i - 1] ) ++i;
return i == n / 2;
}
int main()
{
std::cout << std::boolalpha << is_palindrome( "madam" ) << "\n";
std::cout << std::boolalpha << is_palindrome( "happy" ) << "\n";
return 0;
}
Его вывод
true
false
Вы можете написать функцию короче, как показано в демонстрационной программе ниже.Однако эта функция менее эффективна, чем функция, использующая цикл, поскольку ей необходимо выделить память для временной строки std::string( std::rbegin( s ), std::rend( s ) )
#include <iostream>
#include <iomanip>
#include <string>
#include <iterator>
bool is_palindrome( const std::string &s )
{
return s == std::string( std::rbegin( s ), std::rend( s ) );
}
int main()
{
std::cout << std::boolalpha << is_palindrome( "madam" ) << "\n";
std::cout << std::boolalpha << is_palindrome( "happy" ) << "\n";
return 0;
}
Вывод программы такой же, как показано выше, и равен
* 1014.*