uva_401_Palindromes

water problem.
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;

#define MAX_CHAR        21

char con_digit[] = {
        '1', 'S', 'E', '-', 'Z',
        '-', '-', '8', '-'
};

char con_char[] = {
        'A', '-', '-', '-', '3',
        '-', '-', 'H', 'I', 'L',
        '-', 'J', 'M', '-', 'O',
        '-', '-', '-', '2', 'T',
        'U', 'V', 'W', 'X', 'Y',
        '5'
};

void conversion(const char *str, char *des)
{
        for(int i = 0; '\0' != str[i]; i ++) {
                if( isalpha(str[i]) ) {
                        des[i] = con_char[ str[i]-'A' ];
                }
                else if( isdigit(str[i]) ) {
                        des[i] = con_digit[ str[i]-'1' ];
                }
        }
        des[strlen(str)] = '\0';
}

int is_palindrome(const char *str)
{
        char tmp[MAX_CHAR];
        for(int l = 0, r = strlen(str)-1; l < r; l ++, r --) {
                if( str[l] != str[r] ) {
                        return 0;
                }
        }
        return 1;
}

int is_mirror(const char *src, const char *des)
{
        for(int i = 0, j = strlen(des)-1; j >= 0; i ++, j --) {
                if( src[i] != des[j] ) {
                        return 0;
                }
        }
        return 1;
}

int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
        freopen("test.in", "r", stdin);
#endif
        char str[MAX_CHAR], conv_str[MAX_CHAR];
        int  flag_pal, flag_mirror;
        while( ~scanf("%s", str) ) {
                conversion(str, conv_str);
                //printf("ori: %s, des:%s\n", str, conv_str);
                flag_pal = is_palindrome(conv_str); flag_mirror = is_mirror(str, conv_str);
                if( flag_pal && flag_mirror ) {
                        printf("%s -- is a mirrored palindrome.\n", str);
                }
                else if( flag_pal ) {
                        printf("%s -- is a regular palindrome.\n", str);
                }
                else if( flag_mirror ) {
                        printf("%s -- is a mirrored string.\n", str);
                }
                else {
                        printf("%s -- is not a palindrome.\n", str);
                }
                printf("\n");
        }
        return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值