Это для домашнего задания в школе. Я не прошу правильных ответов, просто подтолкнуть в правильном направлении. Объяснение того, почему это происходит не так, было бы здорово, а также объяснение правильного метода. Что должна делать эта программа на C, так это читать пользовательский ввод без пробелов и знаков препинания и присваивать его строке массива символов. Затем этот массив следует передать в палиндром функции. Палиндром должен иметь длину строки, и если он равен 1 или 0, вернуть TRUE или 1, иначе двигаться дальше и проверить первый и последний символ строки. Если они совпадают, извлеките 2-й и 2-й до последнего символов, а также все символы между ними и передайте их в палиндром функции.
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
typedef int Bool;
Bool palindrome(char str[]);
main()
{
char string[1000], ch;
int i = 0;
printf("Enter a message: ");
while((ch = getchar()) != '\n'){
if(isspace(ch)==FALSE || ispunct(ch)==FALSE);
string[i] = tolower(ch);
i++;
}
string[i] = '\0';
printf("\n");
if(palindrome(string))
printf("Palindrome\n");
else
printf("Not a palindrome\n);
return 0;
}
Bool palindrome(char str[])
{
int length = strlen(str);
if((length == 1) || (length == 0))
return TRUE;
else
{
if((str[0] == str[length - 1])
{
char str_new[length-1];
int i, j;
for(i = 1, j = 0; str[i]!=str[length-1]; i++, j++)
str_new[j] = str[i];
str_new[i] = '\0';
palindrome(str_new);
}
else
return FALSE;
}
}
Независимо от того, какой ввод, он всегда печатает, что заданная строка не является палиндромом. Например, когда я ввожу
Он жил как дьявол, а?
он распечатывает
Не палиндром
Также, когда я редактировал программу, чтобы проверить, что было в строке массива, используя предыдущий ввод, это было
Он жил как дьявол, а?
Не стесняйтесь комментировать любые другие аспекты моего кода, которые, по вашему мнению, улучшают использование кода. Они действительно не дают ничего, кроме «да, это правильно» или «нет», это не касается нашего кода.
РЕДАКТИРОВАТЬ:
Я проверил, какое значение в массиве символов, строка, было. Я говорю это перед последней цитатой.
palindrome()
распечатайте ее. Тогда вы узнаете, правильно ли вы его продезинфицировали. - person alexis   schedule 23.03.2013if (!isspace(ch) && !ispunct(ch))
или еще лучше:if (isletter(ch))
- person alexis   schedule 23.03.2013