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”通过了测试。
#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;
}
}
}
}
C和指针--编程题9.14第10小题--判断回文函数的更多相关文章
- 五道java小题,补更四道java小题
一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import j ...
- bzoj千题计划305:bzoj2565: 最长双回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=2565 正着构造回文自动机 倒过来再构造一个回文自动机 分别求出以位置i开始的和结尾的最长回文串 # ...
- python经典算法题:求字符串中最长的回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- LeetCode第九题—— Palindrome Number(判断回文数)
题目描述 Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- HDU 3068 最长回文( Manacher模板题 )
链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...
- leecode刷题(14)-- 有效的字母异位词
leecode刷题(14)-- 有效的字母异位词 有效的字母异位词 描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = " ...
- 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
随机推荐
- python多线程使用场景
python多线程使用场景 如果程序时cpu密集型的,使用python的多线程是无法提升效率的,如果程序时IO密集型的,使用python多线程可以提高程序的整体效率 CPU密集型(CPU-bound) ...
- jquery中的$(document).ready(function(){})和$(window).load()比较
1.执行时间 window.onload()即jquery写法中的$(window).load(function(){})必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document). ...
- C#使用MPI进行高性能计算
MPI.NET是用于Microsoft.NET环境的高性能.易于使用的消息传递接口(MPI)实现.mpi是编写在分布式内存系统(如计算集群)上运行的并行程序的事实上的标准,并且得到了广泛的实现.大多数 ...
- Java工程师学习指南第6部分:深入理解JVM虚拟机
本文整理了微信公众号[Java技术江湖]发表和转载过的JVM虚拟机相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. JVM原理分析,看了都说好 JVM 深入学习:Java 解析 Cl ...
- 自助机dmv?鸡肋
今天终于扛着懒癌去了一趟所谓的dmv自动机(dmv now kiosk),发现此机器只处理有关vehicle的三种事项,比如vehicle的new registration之类的,如果是其它事情还是得 ...
- 【ARM-Linux开发】 uboot启动阶段修改启动参数方法及分析
作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个--bootloa ...
- 【计算机】DMA原理2
DMA (直接存储器访问) DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否则,C ...
- Guava源码阅读-base-CharMatcher
package com.google.common.base; (部分内容摘自:http://blog.csdn.net/idealemail/article/details/53860439) 之前 ...
- Kafka 1.1.0 服务端源码阅读笔记
网络层 01: 服务器的启动 02: Acceptor和Processor 03: RequestChannel API层 04: Handler和Apis 06: Produce请求(1): 写入本 ...
- Python初学者常见错误详解
Python初学者常见错误详解 0.忘记写冒号 在 if.elif.else.for.while.class.def 语句后面忘记添加 “:” if spam == 42 print('Hello ...