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函数的编码实现思路如下:

  1. 当 strlen(string) <= 1。如果string的长度为0,则返回true;如果string的长度为1,如果是字母字符,返回true;否则返回false。
  2. 当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( != *(++p))
42     {
43        // p++;
44     }
45     p--;
46     while(str < p)
47     {
48         while(!isalpha(*str))
49         {
50             if( == *str)
51             {
52                 std::cout<<"it has no alpha
";
53                 return false;
54             }
55             ++str;
56         }
57         while(!isalpha(*p))
58         {
59             --p;
60         }
61         if(islower(*str))
62         {
63             if((*p == *str) || (*p == *str - 32))
64             {
65                 ++str;
66                 p--;
67             }
68             else
69             {
70                 return false;
71             }
72         }
73         else
74         {
75             if((*p == *str) || (*p == *str + 32))
76             {
77                 ++str;
78                 --p;
79             }
80             else
81             {
82                 return false;
83             }
84         }
85     }
86 }

 

以上是关于C和指针--编程题9.14第10小题--判断回文函数的主要内容,如果未能解决你的问题,请参考以下文章

c语言编程题目求解

c语言,利用递归判断回文

编程找出所有三位回文素数 用c语言

C语言 判断回文字符串

用递归的方法实现判断回文字符c语言

C语言 关于判断回文数的程序