, , , , '\n', .
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char s[100];
fgets(s, sizeof s, stdin);
s[strcspn(s, "\r\n")] = '\0';
size_t len = strlen(s);
- "" , , . 2 .
size_t mismatch;
if (is_palindrome(s, len, &mismatch)) {
puts("Palindrome");
} else if (is_palindrome(s + mismatch + 1, len - mismatch*2 - 1, NULL)) {
printf("left <%c>\n", s[mismatch]);
} else if (is_palindrome(s + mismatch, len - mismatch*2 - 1, NULL)) {
printf("right <%c>\n", s[len - mismatch-1]);
} else {
puts("Not palindrome nor off by 1 palindrome");
}
}
, , is_palindrome()
bool is_palindrome(const char *s, size_t len, size_t *mismatch) {
printf("<%s> %zu\n", s, len);
size_t i = 0;
while (i + 1 < len) {
if (tolower((unsigned char)s[i]) !=
tolower((unsigned char )s[len - 1])) {
if (mismatch) {
*mismatch = i;
}
return false;
}
i++;
len--;
}
return true;
}