Проверить, является ли строка палиндромом - C (СИ)
Формулировка задачи:
Cчитать из файла строку.
Проверить, является ли она палиндромом.
Пробелы игнорировать.
Решение задачи: «Проверить, является ли строка палиндромом»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void remove_spaces(char * s) {
if ( *s )
remove_spaces( isspace(*s) ? memmove(s, s + 1, strlen(s)) : s + 1 );
}
int test_palindrome(const char * s, const size_t count) {
return ( count > 1 ) ? ( s[0] ^ s[count - 1] || test_palindrome(s + 1, count - 2) ) : 0;
}
int main(void) {
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
remove_spaces(buf);
printf("%s\n", ( test_palindrome(buf, strlen(buf)) ) ? "NO" : "YES");
}
return 0;
}
Объяснение кода листинга программы
- Первый шаг в функции
main- запрос на ввод строки от пользователя с помощьюprintfиfgets. - Введенная строка сохраняется в переменной
buf. - Если строка пустая или содержит только пробелы, то программа пропускает проверку на палиндром и выводит
NO. - Вызывается функция
remove_spaces, чтобы удалить все пробелы из строки. - Далее вызывается функция
test_palindrome, которая проверяет, является ли строка палиндромом. - Если строка является палиндромом, то выводится
YES, иначе выводитсяNO. - Цикл продолжается, пока пользователь не введет пустую строку или не завершит ввод.
- В конце программы возвращается 0, что означает успешное завершение работы программы.