程序3-3 Palindromes

刘大婶说这个比较难,哈哈,我感觉自己写的代码还是比较简单的.

#include<stdio.h>
#include<string.h>
#include<math.h>
int is_palindrome(char x[],int n);//用于判断是否回文  //如果回文的话,返回值为1,反之为0
int is_mirrored(char x[],int n);//用于判断是否镜像    //同上
int main()
{
    char a[11111];
    int s1,q,w;
    while(scanf("%s",a)!=EOF)
    {
        s1=strlen(a);
        q=is_palindrome(a,s1);     //传送过去的长度是实际长度
        w=is_mirrored(a,s1);
        if(q==1)
        {
            if(w==1)
                printf("%s -- is a mirrored palindrome.",a);
            else
                printf("%s -- is a regular palindrome.",a);
        }
        else
        {
            if(w==1)
                printf("%s -- is a mirrored string.",a);
            else
                printf("%s -- is not a palindrome.",a);
        }
        printf("

");
    }
    return 0;
}
int is_palindrome(char x[],int n)//判断是否回文
{
    int m,i,q=0;
    m=n/2;             //实际长度
    for(i=0;i<m;i++)
    {
        if(x[i]==x[n-1-i])
            q++;
    }
    if(q==m)
        return 1;
    else
        return 0;
}
int is_mirrored(char x[],int n)
{
    char a[]={"AEHIJLMOSTUVWXYZ12358"},b[]={"A3HILJMO2TUVWXY51SEZ8"};
    int s1,q=0,j,m,i;
    if(n%2==0)    //用于处理字符串的奇偶数.
        m=n/2;
    else
        m=(n/2)+1;
    s1=sizeof(a);
    for(i=0;i<m;i++)          //一次一次的向下 传送    所输入的  字符
    {
        for(j=0;j<s1;j++)     //将上一个传送下来的字符   寻找一下看看有没有是镜像字符的
        {
            if(x[i]==a[j])   //将输入的字符一个个的  和   镜像字符比较
            {
                break;      //如果有相同的就跳出去.
            }
        }
        if(j==s1) //不是镜像字符
            return 0;
        else    //发现了 它是镜像串中的字符
        {
            if(x[n-1-i]==b[j])//用于判断左边的  是不是和它对应的镜像串.
            {
                q++;           //用于记录有几对镜像字符.
            }
        }
    }
    if(q==m)
        return 1;  //   所有的镜像字符都对上号了.
    else
        return 0;  //   有的镜像字符不对号.
}
原文地址:https://www.cnblogs.com/A-FM/p/5098718.html