UVa 401 Palindromes(简单字符串)

Posted huatian5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 401 Palindromes(简单字符串)相关的知识,希望对你有一定的参考价值。

  简单的判断是否是回文串、镜像串,然后自己写的真费劲,没逃掉刘汝佳的书,这里的代码很有技巧性,特别值得学习,额,其实他书上的代码都很精简

Character Reverse Character Reverse Character Reverse
A A M M Y Y
B   N   Z 5
C   O O 1 1
D   P   2 S
E 3 Q   3 E
F   R   4  
G   S 2 5 Z
H H T T 6  
I I U U 7  
J L V V 8 8
K   W W 9  
L J X X  
这个要用一维数组存储

题意:

思路:

/*
UVa 401 Palindromes
题意:输入一个字符串,判断其是否是回文串或者镜像串
输入的字符可能会有不合法的镜像字符,但是保证没有0,
其他所有字母和9个数字
思路:没逃掉刘汝佳的书,将镜像的字符存在一个数组里面,
将输出的字符串存在一个数组里面,不过确实挺好用,然后就是
简单的首位循环判断了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctype.h>
using namespace std;
char rev[40]="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
char judge(char c)//相应的镜像符号
{
    if(isalpha(c))//如果是字母
        return rev[c-'A'];
    return rev[c-'0'+25];//如果是数字,+25字母
}
int main()
{
    char output[4][30]={"is not a palindrome.","is a regular palindrome.",
    "is a mirrored string.","is a mirrored palindrome."};//巧妙,省事
    char str[25];
    while(scanf("%s",str)!=EOF)
    {
        int len=strlen(str);
        int flag1=1,flag2=1;
        for(int i=0;i<(len+1)/2;i++)
        {
            if(str[i]!=str[len-i-1])//是否回文
                flag1=0;
            if(judge(str[i])!=str[len-i-1])//是否镜像
                flag2=0;
        }
        //竟然注释掉cout<<flag1<<" "<<flag2<<endl;
        printf("%s -- %s\n\n",str,output[flag2*2+flag1]);
    }
    return 0;
}
/*
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
*/


以上是关于UVa 401 Palindromes(简单字符串)的主要内容,如果未能解决你的问题,请参考以下文章

uva 401.Palindromes

回文词 (Palindromes,Uva401)

回文词(Palindromes, UVa401)

紫书例题3-3 回文词(Palindromes, UVa401)

[UVa] Palindromes(401)

UVa -- 401 Palindromes