输入一个字符串,判断它是否为回文串以及镜像串,输入的字符串保证不含数字0,回文串就是反转后与原串相同,例如abba等,镜像串就是左右镜像之后与原串相同,例如2S,但并不是每个字符都在镜像后有合法的字符串与之对应。镜像图略。
分析:回文串和镜像串的判断一起完成,使用常量数组解决,本人使用string类来完成
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::cout;
using std::cin;
using std::endl;
using std::vector;
//用常量数组存储对应镜像
const string rev="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
//对应于多个0,1变化量
const vector<string> 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()
{
string s;
while(cin>>s)
{
int p=1,m=1;
int len=s.size();
for(int i=0;i<len;++i)
{
if(s[i]!=s[len-1-i]) p=0; //不是回文串
if(r(s[i])!=s[len-1-i]) m=0; //不是镜像串
}
cout<<msg[m*2+p]<<endl;
}
return 0;
}