【9-10】编写函数
int palindrome(char *string);
如果参数字符串是个回文,函数就返回真,否则返回假。回文就是指一个字符串从左向右和从右向左读是一样的。函数应该忽略所有的非字母字符,而且在进行字符比较时不用区分大小写。
其实回文本身的检测逻辑其实很简单,就是将一个指针指向最后,一个指针指向头部,不断靠近对比。
但这个题目加了一些额外条件:
1、忽略所有非字母字符
2、忽略大小写
大的检测逻辑没有变化,只是说判断的时候需要添加额外条件。
#define TRUE 1
#define FALSE 0
#define NUL '\0'
int palindrome(char *string) {
char *string_end = string + strlen(string) - 1;
while(TRUE) {
while(!isalpha(*string)) {
string++;
}
while(!isalpha(*string_end)) {
string_end--;
}
//到达或者越过中线即完成
if(string_end <= string) {
return TRUE;
}
if(tolower(*string) != tolower(*string_end)) {
return FALSE;
}
string++;
string_end--;
}
}
int main()
{
char string[] = "helloolleh";
printf("%d\n", palindrome(string));
return 0;
}