Является ли данный текст палиндромом? - C (СИ)
Формулировка задачи:
Дана строка символов, содержащая некоторый текст. Разработать программу, которая определяет, является ли данный текст палиндромом, т. е. читается ли он слева направо так же, как и справа налево (например, "А роза упала на лапу Азора").
Решение задачи: «Является ли данный текст палиндромом?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <wchar.h> #include <wctype.h> #include <locale.h> bool is_palindrom(const wchar_t *str) { wchar_t *end = (wchar_t *)str + wcslen(str) - 1; while(str < end) { if(*str == L' ') ++str; if(*end == L' ') --end; if(towlower(*str) != towlower(*end)) return false; ++str; --end; } return true; } int main(int argc, char *argv[]) { setlocale(LC_ALL, "ru_RU.UTF-8"); wchar_t *str = L"А роза упала на лапу Азора"; fwprintf(stdout, L"Фраза \"%ls\" ", str); if(true == is_palindrom(str)) fwprintf(stdout, L"является "); else fwprintf(stdout, L"не является "); fwprintf(stdout, L"палиндромом.\n"); return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с широкими символами и строками
- Определяем функцию
is_palindrom
, которая принимает указатель на широкую строку и проверяет является ли она палиндромом - Внутри функции инициализируем указатель
end
на последний символ строки, на которую указывает указательstr
- Используем цикл
while
для сравнения символов с начала и конца строки, обходя пробелы - Если символы не равны, возвращаем
false
- Если все символы равны, возвращаем
true
- В функции
main
устанавливаем локаль на русскую, используяsetlocale
- Инициализируем широкую строку
А роза упала на лапу Азора
- Выводим строку на экран с помощью
fwprintf
- Вызываем функцию
is_palindrom
и сохраняем результат в переменной типаbool
- Выводим соответствующее сообщение на экран с помощью
fwprintf
- Возвращаем
EXIT_SUCCESS
для успешного завершения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д