《C和指针》——第九章 判断回文

《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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值