#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<map>
#include<set>
#include<sstream>
#include<functional>
#include<cassert>
#include<list>
#include<iterator>
#include<utility>
#include <stdexcept>
#include <sstream>
#include <fstream>
#include<unordered_map>
#include<unordered_set>
#include<ctype.h>
using namespace std;
using namespace std::placeholders;
string str = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";
int main()
{
string line;
bool flag1, flag2;
while (getline(cin, line))
{
flag1 = false;
flag2 = true;
int len = line.size();
string a, b;
if (line.size() % 2 == 0)
{
a = line.substr(0, len / 2);
b = line.substr(len / 2, len / 2);
}
else
{
a = line.substr(0, len / 2);
b = line.substr(len / 2 + 1, len / 2);
}
reverse(a.begin(), a.end());
if (a == b)
{
flag1 = true;
}
for (auto i = 0; i < (len+1)/ 2; i++)//通过常量数组判断是不是常量数组
{
int k;
if (isalpha(line[i]))
k = line[i] - 'A';
else
k = line[i] - '0' + 25;
if (str[k] != line[len - i - 1])
flag2 = false;
}
if (flag1 == true &&flag2 == true)
cout << line << " -- is a mirrored palindrome.\n\n";
else if (flag1 == false && flag2 == true)
cout << line << " -- is a mirrored string.\n\n";
else if (flag1 == true && flag2 ==false)
cout << line << " -- is a regular palindrome.\n\n";
else
cout << line << " -- is not a palindrome.\n\n";
}
return 0;
}
白书上的程序
#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<map>
#include<set>
#include<sstream>
#include<functional>
#include<cassert>
#include<list>
#include<iterator>
#include<utility>
#include <stdexcept>
#include <sstream>
#include <fstream>
#include<unordered_map>
#include<unordered_set>
#include<ctype.h>
using namespace std;
using namespace std::placeholders;
const char* rev= "A 3 HIL JM O 2TUVWXY51SE Z 8 ";
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];
}
int vs_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 - i - 1])p = 0;
if (r(s[i]) != s[len - i - 1])m = 0;
}
printf("%s -- is %s.\n\n", s, msg[m * 2 + p]);
}
return 0;
}