Я пытаюсь создать программу C, которая проверяет, является ли последовательность символов палиндромом или нет. Я должен использовать стек и рекурсивную функцию.
Первое число, указанное в качестве входных данных - это длина строки. Программа корректно работает с четными длинами, но не распознает палиндромность нечетных строк. Я пытался найти ошибку, по крайней мере, в течение часа, но безуспешно.
Это код.
#include <stdio.h>
#include <stdlib.h>
struct c {
char cha;
struct c *nextPtr;
};
typedef struct c Character;
void push(Character **headPtr, char c) {
Character *newC = malloc(sizeof(Character));
if(newC == NULL) {
puts("Insufficient memory.");
}
newC->cha = c;
newC->nextPtr = *headPtr;
*headPtr = newC;
}
char pop(Character **headPtr) {
if(*headPtr != NULL) {
Character *tempPtr = *headPtr;
char c = (*headPtr)->cha;
*headPtr = (*headPtr)->nextPtr;
free(tempPtr);
return c;
}
}
void isPalindrome(int stringLength, int charNum) {
static Character *headPtr = NULL;
if(stringLength == 1) {
puts("Palindrome");
exit(0);
}
if(charNum < (stringLength/2)) {
char c = getchar();
push(&headPtr, c);
return isPalindrome(stringLength, charNum+1);
}
if(stringLength % 2) {
getchar();
}
char d = getchar();
char e = pop(&headPtr);
if(d != e) {
puts("Not palindrome");
exit(0);
}
return;
}
int main() {
int n;
scanf("%d", &n);
while(getchar()!='\n');
isPalindrome(n, 0);
puts("Palindrome.");
return 0;
}
Вы можете попробовать сами, просто введя нечетное число, затем введите, чем последовательность символов. Программа не распознает, является ли это палиндромом, и всегда говорит, что это не так, или даже делает более странные вещи, такие как вообще ничего не выводить и ждать большего ввода.
Я действительно не знаю, что мне не хватает.