《C和指针》第九章
题目:编写函数
int palindrome( char *string );
如果参数字符串是个回文,函数就返回真,否则就返回假。回文就是指一个字符串如果从左向右读和从右向左读是一样的。函数应该忽略所有的非字母字符,而且在进行字符比较时不用区分大小写。
举例:Madam, I'm Adam 就是一个回文。
下面是我写的:
/************************************************************************************************
* Copyright(C):
* Filename :
* Author :
* Version :
* Date :
* Description :
*************************************************************************************************/
#include <ctype.h>
#include <string.h>
//----------------------------------------------------------
// FindAlpha()
//
//
char *FindAlpha(register char *string, register char *end){
while( string<=end && isalpha(*string)==0 ){
string++;
}
if ( string > end ){
return NULL;
}
else{
return string;
}
}
//----------------------------------------------------------
// FindAlpha()
//
//
char *FindAlphaR(register char *begin, register char *end){
while( end>=begin && isalpha(*end)==0 ){
end--;
}
if ( end < begin ){
return NULL;
}
else{
return end;
}
}
//----------------------------------------------------------
// Palindrome()
//
//
int Palindrome(char *string){
char *phead;
char *ptail;
char *tmph;
char *tmpt;
if ( string == NULL ){
return 0;
}
phead = string;
ptail = phead+strlen(string)-1;
if ( (phead=FindAlpha(phead, ptail)) == NULL ) return 0;
if ( (ptail=FindAlphaR(phead,ptail)) == NULL ) return 0;
tmph = phead;
tmpt = ptail;
while( phead < ptail ){
if ( tolower(*phead) != tolower(*ptail) ){
break;
}
phead = FindAlpha(tmph+1,tmpt-1);
ptail = FindAlphaR(tmph+1,tmpt-1);
tmph = phead;
tmpt = ptail;
if ( phead==NULL || ptail==NULL ){
break;
}
}
return phead == ptail;
}