C和指针--编程题9.14第10小题--判断回文函数
2024-09-08 13:51:32
题目:
编写函数
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”通过了测试。
#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;
}
}
}
}
最新文章
- ODAC ,MYDAC版本问题
- asp.net如何在前台利用jquery Ajax调用后台方法
- halcon摄像机标定
- Windows nexus 启动失败
- IOS 中的CoreImage框架
- hdu 1421
- asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法
- IIS PHP 配置 问题总结
- 【NET】Winform用户控件的初步封装之列表页控件
- Inno Setup入门(十八)&mdash;&mdash;Inno Setup类参考(4)
- JavaScript学习笔记之数组(一)
- java基础(八)-----深入解析java四种访问权限
- python中的数组和列表
- B树/[oracle]connect BY语句
- [easyUI] lazyload 懒加载
- ADO.NET 基本操作
- C#语句 分支语句 if --- else ---
- ReferenceError: weakly-referenced object no longer exists Python kafka
- class<;T>;和 class<;?>;类型 有什么区别
- mybatis resultMap 映射配置