ZOJ 1325 Palindromes

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <map>
using namespace std;
char ss[]="E3JLS2Z5AHIMOTUVWXY18";
int slen;
bool ishave(char c)
{
    for(int i=0; i<slen; i++)
    {
        if(c==ss[i])
            return true;
    }
    return false;
}
char get(char c)
{
    switch(c)
    {
    case 'E':
        return '3';
    case 'J':
        return 'L';
    case 'S':
        return '2';
    case 'Z':
        return '5';
    case '3':
        return 'E';
    case 'L':
        return 'J';
    case '2':
        return 'S';
    case '5':
        return 'Z';
    default :
        break;
    }
    return c;
}
int main()
{
    char str[1000];
    slen=strlen(ss);
    while(scanf("%s",str)!=EOF)
    {
        int len = strlen(str);
        int i=0,j=len-1;
        bool ispalindrome=true;
        bool ismirrored  =true;
        while(i<j)//ispalindrome
        {
            if(str[i]!=str[j])
            {
                ispalindrome=false;
                break;
            }
            i++;
            j--;
        }
        char tmp[1000];
        strcpy(tmp,str);
        for(int i=0;i<len;i++)
        {
            if(ishave(tmp[i]))
                tmp[i]=get(tmp[i]);
            else
            {
                ismirrored=false;
                break;
            }
        }
        if(ismirrored)
        {
            for(int i=0,j=len-1;i<len;i++,j--)
            {
                if(str[i]!=tmp[j])
                {
                    ismirrored=false;
                    break;
                }
            }
        }
        if(ispalindrome)
        {
            if(ismirrored)// true true
            {
                printf("%s -- is a mirrored palindrome.\n",str);
            }
            else//true false
            {
                printf("%s -- is a regular palindrome.\n",str);
            }
        }
        else
        {
            if(ismirrored)
            {
                printf("%s -- is a mirrored string.\n",str);
            }
            else
            {
                printf("%s -- is not a palindrome.\n",str);
            }
        }
        printf("\n");
    }
    return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值