Palindromes,Uva401
回文词(Uva401)
知识点
#include<ctype.h> //用来测试映射字符
- 如果满足描述的条件,则这些函数返回非零(true)。如果不满足描述的条件,则这些函数返回零。
- eg:int isalpha(int c)该函数查询所含的字符是否为字母
#include<string.h>//包含strlen(s)对字符数组求长度
菜鸟的代码,终究还是用了C++,用的还垃圾
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
char a[]="AAB C D E3F G HHIIJLK LJMMN OOP Q R S2TTUUVVWWXXYYZ5112S3E4 5Z6 7 889 ";
char find(char x){
for(int i=0;i<sizeof(a);i++){
if(a[i]==x&&i%2==0)
return a[i+1];
}
}
string s;
int main(){
while( cin>>s){
int L=s.length();
// printf("L:%d",L);
bool mask1=true,mask2=true;
for(int i=0;i<=L/2;i++){
if(s[i]!=s[L-1-i]){
//cout<<s[i]<<" "<<s[L-1-i]<<endl;
mask1=false;
break;
}
}
for(int i=0;i<=L/2;i++){
if(find(s[i])!=s[L-1-i]){
//cout<<find(s[i])<<" "<<s[L-1-i]<<endl;
mask2=false;
break;
}
}
if(mask1==false){
if(mask2==true)
printf("%s -- is a mirrored string.\n\n",s.c_str());
else
printf("%s -- is not a palindrome.\n\n",s.c_str());
}
else{
if(mask2==true)
printf("%s -- is a mirrored palindrome.\n\n",s.c_str());
else
printf("%s -- is a regular palindrome.\n\n",s.c_str());
}
}
}
大佬的代码
#include<stdio.h>
#include<string.h>
#include<ctype.h>
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 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-l-i])p=0;//不是回文串
if(r[s[i]]!=s[len-l-i])m=0;//不是镜像串
}
printf("%s -- is %s.\n\n",s,msg[m*2+p]);
}
return 0;
}