Блок задач

4. Структуры данных

Темы
Сложность 3

Задача «Палиндромы»

Палиндром – число (например, 404), буквосочетание, слово (например, топот, фин. saippuakauppias = продавец мыла — самое длинное употребительное слово-палиндром в мире) или текст («а роза упала на лапу Азора»), одинаково читающееся в обоих направлениях. Иногда палиндромом неформально называют любой симметричный относительно своей середины набор символов.

Требуется написать программу, которая определяет, является ли данное предложение палиндромом в различных смыслах.

Входные данные

Текстовый файл, содержащий одно предложение. Пример:

A nut for a jar of tuna

Постановка задачи

Определить:

1) Является ли каждое слово палиндромом (побуквенно).

Вывести в консоль каждое слово, содержащееся в предложении, в обратном порядке букв и решение (палиндром — y/n)

2) Является ли все предложение без учета пробелов палиндромом в смысле слова (пред. пункт). Например: «А роза упала на лапу Азора».

Вывести в консоль все предложение в обратном порядке букв (без пробелов) и решение (палиндром — y/n)

3) Является ли все предложение палиндромом в смысле слов как букв. Например, «я он ты он я», «привет тебе Азор тебе привет» — палиндромы.

Вывести в консоль предложение в обратном порядке слов и решение (палиндром — y/n)

Передачу имени входного файла реализовать через аргументы командной строки.

Примечания
  1. Свойство палиндромности не должно зависеть от регистра букв. (Можно все символы преобразовывать в нижний регистр.)

Выходные данные

Пример вывода в консоль (использует файл из примера выше):

A nut for a jar of tuna
Words:
a - y
tun - n
rof - n
a - y
raj - n
fo - n
anut - n

Sentence as a word:
anutforajaroftuna - y

Sentence as a word set
tuna of jar a for nut a - n

Тестовые примеры

Ещё примеры палиндромов:

Anne, I vote more cars race Rome to Vienna.
A new order began, a more Roman age bred Rowena
civic
dewed
deified
dad
mom
devoved
kayak
minim
radar
madam

Тестирование

Необходимо написать набор тестов используя приведённые слова и предложения. Желательно придумать свои.

Функции ввода/вывода нужно тестировать с помощью std::stringstream.