首页 > 代码库 > uva 401 Palindromes

uva 401 Palindromes

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<map>#include<set>#include<vector>#include<queue>#include<stack>using  namespace std;#define bug cout<<"bug----->\n"#define MAXN 10001;char same[]={"AHIMO0TUVWXY18"};bool mirror(string s){    int len=s.length();    if(len%2)    {        int ok=1;        int k=strlen(same);//        cout<<len<<endl;//        cout<<s[len/2]<<endl;        for(int i=0;i<k;i++)            if(s[len/2]==same[i])            {                ok=0;                break;            }        if(ok)            return false;    }    for(int i=0;i<len/2;i++)    {        switch(s[i])        {            case 'A': if(s[len-1-i]!='A') return 0;break;            case 'E': if(s[len-1-i]!='3') return 0;break;            case '3': if(s[len-1-i]!='E') return 0;break;            case 'H': if(s[len-1-i]!='H') return 0;break;            case 'I': if(s[len-1-i]!='I') return 0;break;            case 'J': if(s[len-1-i]!='L') return 0;break;            case 'L': if(s[len-1-i]!='J') return 0;break;            case 'M': if(s[len-1-i]!='M') return 0;break;            case 'O': if(s[len-1-i]!='0'&&s[len-1-i]!='O') return 0;break;            case '0': if(s[len-1-i]!='0'&&s[len-1-i]!='O') return 0;break;            case 'S': if(s[len-1-i]!='2') return 0;break;            case '2': if(s[len-1-i]!='S') return 0;break;            case 'T': if(s[len-1-i]!='T') return 0;break;            case 'U': if(s[len-1-i]!='U') return 0;break;            case 'V': if(s[len-1-i]!='V') return 0;break;            case 'W': if(s[len-1-i]!='W') return 0;break;            case 'X': if(s[len-1-i]!='X') return 0;break;            case 'Y': if(s[len-1-i]!='Y') return 0;break;            case 'Z': if(s[len-1-i]!='5') return 0;break;            case '5': if(s[len-1-i]!='Z') return 0;break;            case '1': if(s[len-1-i]!='1') return 0;break;            case '8': if(s[len-1-i]!='8') return 0;break;            default :return 0;        }    }    return true;}bool pali(string s){    int len=s.length();    for(int i=0;i<len/2;i++)        if(s[i]!=s[len-1-i])            return false;    return true;}int main(){    string s;    while(cin>>s)    {        bool a1=mirror(s),a2=pali(s);        if(a1&&a2) cout<<s<<" -- is a mirrored palindrome."<<endl;        else if(a1) cout<<s<<" -- is a mirrored string."<<endl;        else if(a2) cout<<s<<" -- is a regular palindrome."<<endl;        else cout<<s<<" -- is not a palindrome."<<endl;        cout<<"\n";    }    return 0;}



22行的switch函数看的真是心酸。

其实可以用两个数组,就ok!


char one[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char two[]="A   3  HIL JM O   2TUVWXY51SE Z  8 ";