C和指针--编程题9.14第10小题--判断回文函数
Posted jingliang10101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C和指针--编程题9.14第10小题--判断回文函数相关的知识,希望对你有一定的参考价值。
题目:
编写函数
int palindrom( char *string);
如果参数字符串是个回文,函数就返回真,否则就返回假。回文就是指一个字符串从左向右读和从右向左读是一样的。函数应忽略所有的非字母字符,而且在进行字符比较时不用区分大小写。
前提是空白字符、标点符号和大小写状态被忽略,当Adam第1次遇到Eve时他可能会说的一句话:“Madam,I‘m Adam”就是回文一例。
分析题目,题目中没有规定空字符串和全是非字母字符的情况是否属于回文,我私自将空字符串归为回文,将全是非字母字符归为非回文,palindrom函数的编码实现思路如下:
- 当 strlen(string) <= 1。如果string的长度为0,则返回true;如果string的长度为1,如果是字母字符,返回true;否则返回false。
- 当strlen(string) >=2。
使用指针p指向字符串末尾,从两端(string指针从前到后,p指针从后向前)比较字母字符,*string和*p在都是字母字符的情况下,要么是相等关系,要么是大小写关系,一旦不符合回文条件则立马返回false。
根据思路编写代码如下,并使用“Madam,I‘m Adam”通过了测试。
1 #include<iostream> 2 #include<string.h> 3 const static int BUFF_SIZE = 50; 4 bool palindrome(char * str); 5 int main(int argc, char *argv[]) 6 { 7 char str[BUFF_SIZE]; 8 std::cout<<"enter a char[]: "<<std::endl; 9 std::cin.getline(str, BUFF_SIZE); 10 std::cout<<"str: "<<str<<std::endl; 11 if(palindrome(str)) 12 { 13 std::cout<<"""<<str<<"" is a palindrome "; 14 } 15 else 16 { 17 std::cout<<"""<<str<<"" is not a palindrome "; 18 } 19 return 0; 20 } 21 bool palindrome(char * str) 22 { 23 if(strlen(str) == 0) 24 { 25 std::cout<<"it is a null string "; 26 return true; 27 } 28 if(strlen(str) == 1) 29 { 30 if(isalpha(*str)) 31 { 32 return true; 33 } 34 else 35 { 36 std::cout<<"it has no alpha "; 37 return false; 38 } 39 } 40 char * p = str; 41 while(‘