http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=show_problem&problem=342
把 判断 写成一个一个的方法,写起来就轻松多了
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char one[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char two[] = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";
int len = 35;
int isPali(char str[])
{
int l = strlen(str)-1;
int i,j;
for(i=0,j=l-1;i<=j; i++,j--)
{
if(str[i]!=str[j])
return 0;
}
return 1;
}
int pos(char c)
{
int i;
for(i=0; i<len; i++)
{
if(c==one[i])
return i;
}
return -1;
}
int isMir(char str[])
{
int i,j;
int l = strlen(str)-1;
for(i=0,j=l-1; i<l; i++,j--)
{
int p = pos(str[j]);
if(p>0)
{
if(two[p]!=str[i])
return 0;
}
}
return 1;
}
int main()
{
char str[100];
while(fgets(str,100,stdin))
{
int i;
for(i=0; str[i]!='\n'; i++)
cout << str[i];
int isp = isPali(str);
int ism = isMir(str);
if(isp && ism)
{
cout << " -- is a mirrored palindrome." << endl;
}
else if(isp)
{
cout << " -- is a regular palindrome." << endl;
}
else if(ism)
{
cout << " -- is a mirrored string." << endl;
}
else
{
cout << " -- is not a palindrome." << endl;
}
cout << endl;
}
return 0;
}