这是一道简单的字符串处理问题,需要判断所给字符串是否是回文或是“镜子串”。
回文的判断:只需要判断串的首尾字符是否相同,然后首尾同时向中间移一个字符再判断,如此循环。
“镜子串”的判断:先将原串替换为reverse后的串,然后与原串比较是否相同即可。
我的代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> using namespace std; char input[25]; const char CharReverse[] = "A 3 HIL JM O 2TUVWXY5"; const char NumReverse[] = "01SE Z 8 "; int is_palindrome() { int length=strlen(input); int i=0, j=length-1; while(i<=j) { if(input[i++]!=input[j--]) break; } if(i>j) return 1; else return 0; } int is_mirrored() { char Reverse[25]; int length=strlen(input); for(int i=0; i<length; i++) { if(input[i]>='A' && input[i]<='Z') Reverse[length-i-1]=CharReverse[input[i]-'A']; else if(input[i]>='0' && input[i]<='9') Reverse[length-i-1]=NumReverse[input[i]-'0']; } Reverse[length]='\0'; if(strcmp(input,Reverse)==0) return 1; else return 0; } int main() { int flag_palindrome,flag_mirrored; while(cin >> input) { flag_palindrome = flag_mirrored = 0; flag_palindrome = is_palindrome(); flag_mirrored = is_mirrored(); cout << input; if(!flag_palindrome && !flag_mirrored) cout << " -- is not a palindrome.\n\n"; else if(flag_palindrome && !flag_mirrored) cout << " -- is a regular palindrome.\n\n"; else if(!flag_palindrome && flag_mirrored) cout << " -- is a mirrored string.\n\n"; else if(flag_palindrome && flag_mirrored) cout << " -- is a mirrored palindrome.\n\n"; } return 0; }