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;
}
posted @ 2021-03-10 21:34  MurphyVan  阅读(45)  评论(0)    收藏  举报