Palindromes(Uva 401)

#include<stdio.h>
#include<string.h>
#include<ctype.h>
const char* rev = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
const char* msg[]={"not a palindrome","a regular palindrome","a mirrored string","a mirrored palindrome"};
char r(char ch)
{
    if(isalpha(ch))
        return rev[ch-'A'];
    return rev[ch-'0'+25];
}
int main()
{
    char s[30];
    while(scanf("%s",s)==1)
    {
        int len = strlen(s);
        int p=1,m=1,i;
        for(i=0;i<(len+1)/2;i++)
        {
            if(s[i]!=s[len-1-i])
                p=0;//不是回文串
            if(r(s[i])!=s[len-1-i])
                m=0;//不是镜像串
        }
        printf("%s -- is %s.\n\n",s,msg[m*2+p]);
    }
    return 0;
}

  补充知识:


字符串三种表示法:
     1.数组表示法:
                char str[] = "abc";

     2.指针表示法:
                char *str = "abc";
 
     3.常量表示法:
                "abc";

数组表示法和指针表示法的区别:
 
     1.数组表示法可以改变里面的值,指针表示法不可以
 
     2.数组表示法可以接收用户输入的值,指针表示法不可以
 
     3.数组表示法不能用==来判断一个字符串另外一个字符串常量是否相等
                ( 例:char str[]="abc"; if(str == "abc"))
       指针表示法可以用==来判断一个字符串和另外一个字符串常量是否相等strcmp
                 (例:char *str = "abc";  if(str=="abc"))

 

posted @ 2017-08-13 20:35  努力更加美好  阅读(204)  评论(0编辑  收藏  举报