白书,字符串01
字符串的一道水题,不需要什么技巧。
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
map<char, char> table;
void makeTable()
{
table.insert(pair<char, char>('A', 'A'));
table.insert(pair<char, char>('E', '3'));
table.insert(pair<char, char>('H', 'H'));
table.insert(pair<char, char>('I', 'I'));
table.insert(pair<char, char>('J', 'L'));
table.insert(pair<char, char>('L', 'J'));
table.insert(pair<char, char>('M', 'M'));
table.insert(pair<char, char>('O', 'O'));
table.insert(pair<char, char>('S', '2'));
table.insert(pair<char, char>('T', 'T'));
table.insert(pair<char, char>('U', 'U'));
table.insert(pair<char, char>('V', 'V'));
table.insert(pair<char, char>('W', 'W'));
table.insert(pair<char, char>('X', 'X'));
table.insert(pair<char, char>('Y', 'Y'));
table.insert(pair<char, char>('Z', '5'));
table.insert(pair<char, char>('1', '1'));
table.insert(pair<char, char>('2', 'S'));
table.insert(pair<char, char>('3', 'E'));
table.insert(pair<char, char>('5', 'Z'));
table.insert(pair<char, char>('8', '8'));
}
int isPali(string a)
{
int length = a.length();
if(length % 2)
{
for(int i = length / 2; i >= 0; i--)
if(a[i] != a[length - 1 - i])
return 0;
}
else
{
for(int i = length / 2 - 1; i >= 0; i--)
if(a[i] != a[length - 1 - i])
return 0;
}
return 1;
}
int isMirr(string a)
{
int length = a.length();
if(length % 2)
{
for(int i = length / 2; i >= 0; i--)
if(!table.count(a[i]) || table[a[i]] != a[length - 1 - i])
return 0;
}
else
{
for(int i = length / 2 - 1; i >= 0; i--)
if(!table.count(a[i]) || table[a[i]] != a[length - 1 - i])
return 0;
}
return 1;
}
int main()
{
makeTable();
string palistr;
while(cin >> palistr)
{
cout << palistr;
if(isPali(palistr) && isMirr(palistr))
printf(" -- is a mirrored palindrome.\n\n");
else if(isPali(palistr))
printf(" -- is a regular palindrome.\n\n");
else if(isMirr(palistr))
printf(" -- is a mirrored string.\n\n");
else
printf(" -- is not a palindrome.\n\n");
}
return 0;
}