Я думаю, что шаблон функции начинается с объявления переменной n
, которая получает размер переданной строки.
int isPalindrome(char *str)
{
/**
This function will
-return 1 if the given string is Palindrome,
-return 0 if the given string is not Palindrome.
*/
int n = strlen(str);
// Write your code here*
}
Но вы проигнорировали это объявление и использовали выражение strlen( str )
в это объявление
char *ptr2 = str + strlen(str) - 1;
вместо записи, например,
int n = strlen(str);
//...
char *ptr2 = str + n - 1;
В любом случае назначение выглядит не очень хорошо. Например, это объявление
char *ptr2 = str + strlen(str) - 1;
может вызывать неопределенное поведение, когда переданная строка пуста.
Параметры функций должны быть объявлены с квалификатором const
, поскольку переданные строки в качестве аргументов не являются изменено в функциях.
Аргумент стандартной функции tolower
должен быть преобразован в тип unsigned char
.
Функции могут выглядеть следующим образом
size_t strlen( const char *str )
{
size_t n = 0;
while ( str[n] ) ++n;
return n;
}
int isPalindrome( const char *str )
{
const char *ptr1 = str;
const char *ptr2 = str + strlen( str );
if ( ptr1 != ptr2 )
{
while ( ptr1 < --ptr2 &&
tolower( ( unsigned char )*ptr1 ) == tolower( ( unsigned char )*ptr2 ) )
{
++ptr1;
}
}
return !( ptr1 < ptr2 );
}
Также, если функция strlen также должна использовать указатели, она может выглядеть следующим образом
size_t strlen( const char *str )
{
const char *p = str;
while ( *p ) ++p;
return p - str;
}
Вот демонстрация того, как должны выглядеть ваши функции.
#include <stdio.h>
#include <ctype.h>
size_t strlen( const char *str )
{
const char *p = str;
while ( *p ) ++p;
return p - str;
}
int isPalindrome( const char *str )
{
const char *ptr1 = str;
const char *ptr2 = str + strlen( str );
if ( ptr1 != ptr2 )
{
while ( ptr1 < --ptr2 &&
tolower( ( unsigned char )*ptr1 ) == tolower( ( unsigned char )*ptr2 ) )
{
++ptr1;
}
}
return !( ptr1 < ptr2 );
}
int main(void)
{
char *str = "ABCCBA ABCCBA"; //your input
if ( isPalindrome( str ) )
{
printf("\"%s\" is a palindrome\n", str);
}
else
{
printf("\"%s\" is not a palindrome\n", str);
}
return 0;
}
Вывод программы
"ABCCBA ABCCBA" is a palindrome