10945. Мать медведица
По заданной входной
строке определить, является ли она палиндромом.
Вход.
Каждая строка содержит буквы латинского алфавита и знаки пунктуации. Последняя
строка содержит слово “DONE” и не обрабатывается.
Выход. Для каждой строки определить,
является ли она палиндромом игнорируя знаки пунктуации и регистр символов. Если
строка является палиндромом, то вывести “You won't be eaten!”, иначе – “Uh
oh..”.
Madam, Im adam!
Roma tibi subito motibus ibit amor.
Me so hungry!
Si nummi immunis
DONE
You won't be eaten!
You won't be eaten!
Uh oh..
You won't be eaten!
обработка текста
Читаем входную
строку. Удаляем из нее все лишнее, оставляя только символы латинского алфавита,
которые сразу преобразовываем в нижний регистр. Далее движемся с начала и с
конца по строке к ее середине, проверяя символы на совпадение.
Третий тест не является
палиндромом.
Входную строку будем
хранить в символьном массиве s.
char s[1000];
Читаем строку, проверяем ее на
совпадение со словом “DONE”. Удалим из строки лишние символы. Переменная j
будет содержать количество букв в строке, состоящей только из символов
латинского алфавита нижнего регистра.
while(gets(s),
strcmp(s,"DONE"))
{
i = j = -1;
while(s[++i])
if (isalpha(s[i])) s[++j] = tolower(s[i]);
Установим
i = 0. Переменная j указывает на последнюю букву слова.
Сравниваем i - ую и j - ую буквы. Если они равны, то увеличиваем i
и уменьшаем j на единицу. Продолжаем процесс сравнивания пока i
< j. Если на каком-то этапе s[i] ¹ s[j], то входная строка не
является палиндромом.
for(i=0;i<j;i++,j--)
if (s[i] != s[j]) break;
Выводим результат в
зависимости от того, является ли входная строка палиндромом.
if (i>=j) printf("You won't be eaten!\n");
else printf("Uh oh..\n");
}