比较简单的字符串问题。通过练习,重温了一下读入字符串的方法,测量字符串的长度。
下面是代码,注释的部分为我不明白的地方,为什么这样一一对应的写出来,却一直是WA!!! 求指点,不过我也承认存成两个数组比较简洁。
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<string.h>
using namespace std;
char b;char m[25];
const char one[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
const char two[]="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
int pos(char ch){
for (int i=0;one[i]!='\0';i++){
if (ch == one[i]) return i;
}
}
int Mirror(){
int start=0,end=strlen(m)-1;
while(start<=end){
int t=pos(m[start]);
if (m[end]==two[t]){start++;end--;}
else return 0;
}
return 1;
}
/*char Mirror(char a){
if ((a=='A')||(a=='M')||(a=='Y')||(a=='1')||(a=='H')||(a=='T')||(a=='I')||(a=='U')||(a=='V')||(a=='8')||(a=='W')||(a=='X')||(a=='O')){
return a;}
else if (a=='0'){b='O';return b;}
else{
switch(a){
case 'Z':{b='5';break;}
case '5':{b='Z';break;}
case '2':{b='S';break;}
case 'S':{b='2';break;}
case 'E':{b='3';break;}
case '3':{b='E';break;}
case 'J':{b='L';break;}
case 'L':{b='J';break;}
default:{b=' ';}
}
return b;
}
}*/
int main(){
int len,check1,check2;//check1回文标志位,check2镜像标志位
char M;
while(gets(m)){
len=strlen(m);
check1=1;
for(int i=0;i<len/2;i++){
if(m[len-1-i]!=m[i]){check1=0;break;}
}
/*check2=1;
for(int j=0;j<len/2;j++){
M=Mirror(m[j]);
if(m[len-1-j]!=M){check2=0;break;}
}*/
check2=Mirror();
if (check1==0&&check2==0){printf("%s -- is not a palindrome.\n\n",m);}
else if(check1==1&&check2==0){printf("%s -- is a regular palindrome.\n\n",m);}
else if(check1==0&&check2==1){printf("%s -- is a mirrored string.\n\n",m);}
else if(check1==1&&check2==1){printf("%s -- is a mirrored palindrome.\n\n",m);}
}
return 0;}