码迷,mamicode.com
首页 > 其他好文 > 详细

C和指针--编程题9.14第10小题--判断回文函数

时间:2018-10-17 16:54:43      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:span   std   rom   lin   eve   har   ring   clu   返回   

题目:

编写函数

  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\n";
14     }
15     else
16     {
17         std::cout<<"\""<<str<<"\" is not a palindrome\n";
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\n";
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\n";
37             return false;
38         }
39     }
40     char * p = str;
41     while(\0 != *(++p))
42     {
43        // p++;
44     }
45     p--;
46     while(str < p)
47     {
48         while(!isalpha(*str))
49         {
50             if(\0 == *str)
51             {
52                 std::cout<<"it has no alpha\n";
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小题--判断回文函数

标签:span   std   rom   lin   eve   har   ring   clu   返回   

原文地址:https://www.cnblogs.com/jingliang10101/p/9804652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!