题目:

编写函数

  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”通过了测试。

 #include<iostream>
#include<string.h>
const static int BUFF_SIZE = ;
bool palindrome(char * str);
int main(int argc, char *argv[])
{
char str[BUFF_SIZE];
std::cout<<"enter a char[]: "<<std::endl;
std::cin.getline(str, BUFF_SIZE);
std::cout<<"str: "<<str<<std::endl;
if(palindrome(str))
{
std::cout<<"\""<<str<<"\" is a palindrome\n";
}
else
{
std::cout<<"\""<<str<<"\" is not a palindrome\n";
}
return ;
}
bool palindrome(char * str)
{
if(strlen(str) == )
{
std::cout<<"it is a null string\n";
return true;
}
if(strlen(str) == )
{
if(isalpha(*str))
{
return true;
}
else
{
std::cout<<"it has no alpha\n";
return false;
}
}
char * p = str;
while('\0' != *(++p))
{
// p++;
}
p--;
while(str < p)
{
while(!isalpha(*str))
{
if('\0' == *str)
{
std::cout<<"it has no alpha\n";
return false;
}
++str;
}
while(!isalpha(*p))
{
--p;
}
if(islower(*str))
{
if((*p == *str) || (*p == *str - ))
{
++str;
p--;
}
else
{
return false;
}
}
else
{
if((*p == *str) || (*p == *str + ))
{
++str;
--p;
}
else
{
return false;
}
}
}
}

最新文章

  1. ODAC ,MYDAC版本问题
  2. asp.net如何在前台利用jquery Ajax调用后台方法
  3. halcon摄像机标定
  4. Windows nexus 启动失败
  5. IOS 中的CoreImage框架
  6. hdu 1421
  7. asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法
  8. IIS PHP 配置 问题总结
  9. 【NET】Winform用户控件的初步封装之列表页控件
  10. Inno Setup入门(十八)&mdash;&mdash;Inno Setup类参考(4)
  11. JavaScript学习笔记之数组(一)
  12. java基础(八)-----深入解析java四种访问权限
  13. python中的数组和列表
  14. B树/[oracle]connect BY语句
  15. [easyUI] lazyload 懒加载
  16. ADO.NET 基本操作
  17. C#语句 分支语句 if --- else ---
  18. ReferenceError: weakly-referenced object no longer exists Python kafka
  19. class&lt;T&gt;和 class&lt;?&gt;类型 有什么区别
  20. mybatis resultMap 映射配置

热门文章

  1. OPC Utgard的数据访问方式
  2. 《Java语言程序设计》异常处理
  3. .net 结合FFMPEG
  4. js中函数总结(1)
  5. 「java.util.concurrent并发包」之 CopyOnWrite
  6. tomcat单机多应用部署配合Nginx负载均衡
  7. THUSC2013
  8. 织梦DedeCMS给栏目添加缩略图调用的方法
  9. Docker的安装和学习
  10. Python 【for/while循环】