UVA 401-Palindromes
题目大意: 给个字符串,判断是否回文或者镜面回文
解题思路: 先判断是否回文再判断是否镜面回文
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void swap(char *a) {
switch(*a) {
case 'A': *a = 'A';break;
case 'E': *a = '3';break;
case 'H': *a = 'H';break;
case 'I': *a = 'I';break;
case 'J': *a = 'L';break;
case 'L': *a = 'J';break;
case 'M': *a = 'M';break;
case 'O': *a = 'O';break;
case 'S': *a = '2';break;
case 'T': *a = 'T';break;
case 'U': *a = 'U';break;
case 'V': *a = 'V';break;
case 'W': *a = 'W';break;
case 'X': *a = 'X';break;
case 'Y': *a = 'Y';break;
case 'Z': *a = '5';break;
case '1': *a = '1';break;
case '2': *a = 'S';break;
case '3': *a = 'E';break;
case '5': *a = 'Z';break;
case '8': *a = '8';break;
default: *a = '0';break;
}
}
int main() {
char c[1000000], s[1000000];
while((scanf("%s", s)) != EOF) {
int n = strlen(s);
int x = 1, y = 1;
strcpy(c, s);
for(int i = 0; i <= (n - i -1); i++) {
if(c[i] == '0')
c[i] = 'O';
if(c[n-i-1] == '0')
c[n-i-1] = 'O';
if(c[i] != c[n-i-1] )
x = 0;
swap(&c[i]);
if(c[i] == '0')
y = 0;
if(c[i] != c[n-i-1])
y = 0;
if(x == 0 && y == 0)
break;
}
if(x == 1 && y == 1)
printf("%s -- is a mirrored palindrome.\n",s);
else if(x == 1)
printf("%s -- is a regular palindrome.\n",s);
else if(y == 1)
printf("%s -- is a mirrored string.\n",s);
else
printf("%s -- is not a palindrome.\n",s);
printf("\n");
}
return 0;
}