Для начала по стандарту C функция main без параметров должна быть объявлена как
int main( void )
Массив temp
не содержит строки, потому что вы забыли добавить к нему завершающий нулевой символ '\0'.
Итак, вызов strcmp
if(strcmp(temp, str)==0)
приводит к неопределенному поведению.
Также функция gets
небезопасна и не поддерживается стандартом C. Вместо этого используйте функцию fgets
.
Также для проверки того, является ли строка палиндромом, нет необходимости объявлять вспомогательный массив.
Код может выглядеть как
printf("type the desired to string to check pallindrome\n");
fgets(str, sizeof( str ), stdin );
str[strcspn( str, "\n" )] = '\0'; // to remove the new line character '\n'
size_t n = strlen( str );
printf( "%zu\n", n );
size_t i = 0;
while ( i < n / 2 && str[i] == str[n-i-1] ) ++i;
if( i == n / 2 )
{
printf("pallindrome\n");
}
else
{
printf("not a pallindrome\n");
}
Вы можете написать отдельную функцию, которая проверяет, является ли строка палиндромом.
Вот, пожалуйста.
#include <stdio.h>
#include <string.h>
int is_palindrome( const char *s )
{
size_t n = strlen( s );
size_t i = 0;
while ( i < n / 2 && s[i] == s[n-i-1] ) ++i;
return i == n / 2;
}
int main(void)
{
enum { N = 100 };
char s[N];
printf( "Type a desired string to check whether it is a palindrome: " );
fgets( s, sizeof( s ), stdin );
s[ strcspn( s, "\n" ) ] = '\0';
if ( is_palindrome( s ) )
{
printf( "\"%s\" is a palindrome.\n", s );
}
else
{
printf( "\"%s\" is not a palindrome.\n", s );
}
return 0;
}
Вывод программы может выглядеть так
Type a desired string to check whether it is a palindrome: abcdedcba
"abcdedcba" is a palindrome
person
Vlad from Moscow
schedule
12.06.2021
temp
. В качестве альтернативы используйтеstrncmp
- person Den-Jason   schedule 12.06.2021void main()
должно бытьint main()
2.gets
-переполнение буфера. использоватьfgets
- person Ed Heal   schedule 12.06.2021