判断是否为回文串或者(和)镜像串
题目描述:输入一个字符串,判断他是否为回文串或者镜像串。输入数字保证不含0。补充:镜像串就是翻转过来相同的,比如S和2。
(啊,是书上来的,代码也是按照书上的思路写的来着。)
代码: 是c++ 的代码啊
#include <iostream>
#include <string.h>
#include <ctype.h>
using namespace std;
const char* rev = "A 3 HIL JM O9 2TUVWXY51SE Z 8P0"; //判断镜像数的数组
const char* msg[] = { "哪个都不是","是回文数","是镜像数","两者都是" }; //判断回文数的数组
//定义判断镜像数的函数
char r(char ch) {
if (isalpha(ch)) return rev[ch - 'A']; //isalpha():判断是否为英文
return rev[ch - '0' + 25]; //减掉的是初始的,加上的是前面的字母,后是个才是数字
}
int main() {
cout << "请输入一个字符串:" << endl;
char s[30];
cin >> s;
int p = 1, m = 1;
while (s) {
int len = strlen(s);
for (int i = 0; i <= (len + 1)/2; i++) {
if (s[i] != s[len - 1 - i]) p = 0; //不是回文数
if (r(s[i]) != s[len - 1 - i]) m = 0; //不是镜像数
}
cout << s << msg[m * 2 + p] << endl;
break;
}
return 0;
}
结果: