前言:
这道题提交了很多次,一直通不过,记录一下bug点。
题目简介:
判断一串字符串 s 是否回文、镜像(镜像按照表格判断)。
输入:规定只含有合法字符(即A~Z,1~9)
输出格式:s -- is .......\n\n
Bug点:
第二个while的判断条件必须为 i<=len
Bug点测试样例:
输入:L
输出:L -- is a regular palindrome.
AC代码:
//#define LOCAL
#include <bits/stdc++.h>
using namespace std;
int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
//rev mir:
//0 0.is not a palindrome:啥也不是
//1 0.is a regular palindrome:回文 不镜像
//0 1.is a mirrored string:镜像 不回文
//1 1.is a mirrored palindrome;镜像(B=3) 回文(A=A)
string s;
vector<char>v(35,' ');//A-Z (0~25),1~9 (26~34)
v[0]='A';v[4]='3';v[7]='H';v[8]='I';v[9]='L';v[11]='J';v[12]='M';
v[14]='O';v[18]='2';v[19]='T';v[20]='U';v[21]='V';v[22]='W';v[23]='X';
v[24]='Y';v[25]='5';v[26]='1';v[27]='S';v[28]='E';v[30]='Z';v[33]='8';
while(cin>>s){
int len=s.size();
int i=0;
int rev=1,mir=1;
len--;
while(i<=len){
if(s[i]!=s[len])rev=0;
if(s[i]>='A'&&s[i]<='Z'){ //等价于 if(isalpha(s[i]))
if(v[s[i]-'A']!=s[len])mir=0;
}else{
if(v[s[i]-'1'+26]!=s[len])mir=0;
}
len--;i++;
if(!rev&&!mir)break;
}
if(!rev&&!mir){
cout<<s<<" -- is not a palindrome.\n\n";
}else if(rev&&!mir){
cout<<s<<" -- is a regular palindrome.\n\n";
}else if(!rev&&mir){
cout<<s<<" -- is a mirrored string.\n\n";
}else{
cout<<s<<" -- is a mirrored palindrome.\n\n";
}
}
}