Wednesday, February 9, 2011

401 - Palindromes


#include<stdio.h>
#include<string.h>

int isPal(char[]);
int isMirror(char[]);

int main()
{
    char str[25];
    int p,m,f=1;
    //freopen("in.txt","r",stdin);
    while(scanf("%s",str)==1)
    {
        p=isPal(str);
        m=isMirror(str);

        if(p)
        {
            if(m)printf("%s -- is a mirrored palindrome.\n\n",str);
            else printf("%s -- is a regular palindrome.\n\n",str);
        }
        else
        {
            if(m)printf("%s -- is a mirrored string.\n\n",str);
            else printf("%s -- is not a palindrome.\n\n",str);
        }
    }
    return 0;
}

//function to check mirrored string
int isMirror(char str[])
{
    char mstr[25];
    int i,l=strlen(str);
    for(i=0;str[i];i++)mstr[i]=str[i];
    mstr[i]='\0';
    for(i=0;mstr[i];i++)
    {
        switch(mstr[i])
        {
        case 'E':mstr[i]='3';break;
        case '3':mstr[i]='E';break;
        case 'J':mstr[i]='L';break;
        case 'L':mstr[i]='J';break;
        case 'S':mstr[i]='2';break;
        case '2':mstr[i]='S';break;
        case 'Z':mstr[i]='5';break;
        case '5':mstr[i]='Z';break;
        case 'A':case 'H':case 'I':case 'M':
        case 'T':case 'U':case 'V':case 'X':
        case 'O':case 'Y':case '1':case '8':
        case 'W':
             continue;break;
        default:return 0;
        }
    }
    for(i=0;str[i];i++)
        if(str[i]^mstr[l-i-1])
            return 0;
    return 1;
}

//function to check palindrome
int isPal(char str[])
{
    int i,l=strlen(str),n;
    n=l>>1;
    for(i=0;i<=n;i++)
        if(str[i]^str[l-i-1])
            return 0;
    return 1;
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.