#include<string.h>
#include<stdio.h>
int main()
{
char word[25];
while (scanf("%s", word)!=EOF){
int cp=0, cm=0, i, j;
//check palindrome
for (i=0; i<strlen(word); i++){
if (word[i]!=word[strlen(word)-1-i])
break;
}
if (i==strlen(word)) cp=1;
//check mirror
for (i=0, j=strlen(word)-1; i<strlen(word); i++, j--){
int dec=1;
switch(word[i]){
case 'A':
dec = word[j]='A'? 1:0;
break;
case 'E':
dec = word[j]='3'? 1:0;
break;
case 'H':
dec = word[j]='H'? 1:0;
break;
case 'I':
dec = word[j]='I'? 1:0;
break;
case 'J':
dec = word[j]='L'? 1:0;
break;
case 'L':
dec = word[j]='J'? 1:0;
break;
case 'M':
dec = word[j]='M'? 1:0;
break;
case 'O':
dec = word[j]='O'? 1:0;
break;
case 'S':
dec = word[j]='2'? 1:0;
break;
case 'T':
dec = word[j]='T'? 1:0;
break;
case 'U':
dec = word[j]='U'? 1:0;
break;
case 'V':
dec = word[j]='V'? 1:0;
break;
case 'W':
dec = word[j]='W'? 1:0;
break;
case 'X':
dec = word[j]='X'? 1:0;
break;
case 'Y':
dec = word[j]='Y'? 1:0;
break;
case 'Z':
dec = word[j]='5'? 1:0;
break;
case '1':
dec = word[j]='1'? 1:0;
break;
case '2':
dec = word[j]='S'? 1:0;
break;
case '3':
dec = word[j]='E'? 1:0;
break;
case '5':
dec = word[j]='Z'? 1:0;
break;
case '8':
dec = word[j]='8'? 1:0;
break;
default:
dec = 0;
break;
}
if (!dec) break;
}
if (i==strlen(word)) cm=1;
printf("%d %d %d\n", i, j, strlen(word));
if (cp==1 && cm==1){
printf("%s is a mirrored palindrome.\n", word);
}
else if (cp){
printf("%s is a regular palindrome.\n", word);
}
else if(cm){
printf("%s is a mirrored string.\n", word);
}
else if(cp==0 && cm==0) {
printf("%s is not a palindrome.\n", word);
}
}
}
Я даю строки, используя scanf ("% s", слово) Но когда я печатаю ту же самую последнюю программу в конце, используя printf ("% s", слово), строка частично модифицируется и не ' t печатать всю строку правильно.
Пример ввода
МММММ ATOYOTA NOTAPALINDROME ISAPALINILAPASI
Вывод:
3 1 5 MM��� - обычный палиндром , 4 2 7 ATO���� - правильный палиндром. 0 13 14 НОТАПАЛИНДРОМ - это не палиндром. 3 11 15 ISAPALINILAP��� - обычный палиндром.