正回文是一个数字或字母串,其前后方向相同。例如,字符串“abcdedcba”是回文,因为从左到右读取字符串与从右到左读取字符串时相同。
镜像字符串是一个字符串,当字符串的每个元素都更改为其反向(如果它有反向)并且向后读取字符串时,结果与原始字符串相同。例如,字符串“3a i e”是镜像字符串,因为“a”和“i”是它们各自的反转,而“3”和“e”是彼此的反转。
镜像回文是满足常规回文和镜像字符串条件的字符串。字符串“atoyota”是一个镜像回文,因为如果向后读取字符串,则该字符串与原始字符串相同,并且因为如果每个字符都被其反向替换,并且结果向后读取,则结果与原始字符串相同。当然,“A”、“T”、“O”和“Y”都是它们自己的反面。
所有有效字符及其背面的列表如下。
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
请注意,O(零)和0(字母)被认为是同一个字符,因此只有字母“0”是有效字符。
输入
输入由字符串组成(每行一个),每个字符串由一到二十个有效字符组成。任何字符串中都不会有无效字符。你的程序应该读到文件的末尾。
产量
对于每个输入字符串,您应该打印从第1列开始的字符串,紧接着是以下字符串之一。
“--不是回文。” 如果字符串不是回文并且不是镜像字符串
“——是一个规则的回文。” 如果字符串是回文且不是镜像字符串
“--是镜像字符串。” 如果字符串不是回文并且是镜像字符串
“--是镜像回文。” 如果字符串是回文并且是镜像字符串
请注意,输出行要包括上表所示的和下面的示例输出中演示的-'和间距。
此外,在每个输出行之后,必须打印一个空行。
Sample Input
NOTAPALINDROME ISAPALINILAPASI 2A3MEAS ATOYOTA
Sample Output
NOTAPALINDROME -- is not a palindrome. ISAPALINILAPASI -- is a regular palindrome. 2A3MEAS -- is a mirrored string. ATOYOTA -- is a mirrored palindrome.
回文串和镜像串,都是一个原理,正着读和反着读,都是一样的,一开始我用了reverse 函数来判断,但是镜像就不好实现判断。大神思路就是从前和后扫一遍,一个一个判断。设置两个标记回文标记和镜像标记来实现判断。
代码:
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdio.h>
#include<string>
#include<string.h>
typedef long long ll;
using namespace std;
char a[]="A 3 HIL JM O 2TUVWXY5";
char b[]="1SE Z 8 ";
char mp[][100]={" -- is not a palindrome."
, " -- is a regular palindrome."
, " -- is a mirrored string."
, " -- is a mirrored palindrome."};
char zhuanhua(char c)
{
if(isalpha(c))
return a[c-'A'];
else
return b[c-'1'];
}
int main()
{
string s;
while(cin>>s)
{
int huiwen=1;
int jingzi=1;
int start=0;
int end=s.length()-1;
while(start<=end)
{
if(s[start]!=s[end])
huiwen=0;
if(zhuanhua(s[start])!=s[end])
jingzi=0;
start++;
end--;
}
cout<<s<<mp[jingzi*2+huiwen]<<endl;
cout<<endl;
}
return 0;
}
找对应的镜像字符时,巧妙地设置两个字符数组,一 一对应关系,a中下标代表A B C D E ..... ,数组数据是对应的镜像字符。
字母镜像和数组镜像应该分开判断,用了字符函数 isalpha( ),判断是字符还是数字。
char a[]="A 3 HIL JM O 2TUVWXY5";
char b[]="1SE Z 8 ";
判断完后,两个标记就可以判断输出。