uva401Palindromes(回文串和镜像串的判断)

来源:互联网 发布:css布局 书籍 知乎 编辑:程序博客网 时间:2024/06/04 18:50

回文串:是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

镜像串:串水平镜像后和原串相同,如2S和3AIAE。注意并不是所有字符镜像后都能得到一个合法字符。 

判断回文串方法:

#include<stdio.h>#include<string.h>int main(void){    char s[30];    int b=0;  //1表示不是回文字符串    puts("请输入一个字符串:");    scanf("%s",s);    for(int i=0;i<strlen(s)/2;i++)        if(s[i]!=s[strlen(s)-i-1])        {            b++;            break;        }     if(b)         printf("这不是回文字符串。");     else         printf("这是回文字符串。");     return 0;}
判断镜像串方法:

#include <stdio>  #include <string.h>  char *rev = "A   3  HIL JM O   2TUVWXY51SE Z 8 ";//空格分别为3,2,1,1,3,1,2,1    int main()  {      char s[30];      while(scanf("%s",s) == 1)      {          int len = strlen(s);          int p=1,m=1;          for(int i=0;i<(len+1)/2;i++)//若为奇数,中间那个字符也要判断          {                          if(r(s[i])!=s[len-1-i]) m=0;//不是镜像串          }         if(m)        printf("是回文串\n");       else        printf("不是回文串\n");    }  }  

实例:紫书例题3-3:回文词uva401

题意:输入一个字符串,判断它是否为镜像串级回文串.输入的字符串保证不含数字0.

所谓镜像串, 是指左右镜像后原串相同,如 2S 和 3AIAE. 注意,并不是所有的字符在镜像之后都会得到一个合法字符.

#include <cstdio>  #include <cstring>  #include <cctype>  const char *rev = "A   3  HIL JM O   2TUVWXY51SE Z 8 ";//空格分别为3,2,1,1,3,1,2,1  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];//前面有26个字母!?  }  int main()  {      char s[30];      while(scanf("%s",s) == 1)      {          int len = strlen(s);          int p=1,m=1;          for(int 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]);      }  }  



0 0
原创粉丝点击