UVA 401(palindorme)简单字符串处理

2024-06-13 04:48

本文主要是介绍UVA 401(palindorme)简单字符串处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入门的字符串处理,小心为妙。

坑爹的注意空格输出




#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
bool is_p(char *s,int len)//判断是否为回文注意下标
{for(int i=0;i<len/2;i++){if(s[i]!=s[len-i-1]) return 0;}return 1;
}
bool mirror(char *s,int len)//判断是否为镜面
{for(int i=0;i<(len+1)/2;i++){if(s[i]!=s[len-i-1])//判端过程略先累赘{if((s[i]=='E'&&s[len-i-1]=='3')||(s[i]=='3'&&s[len-i-1]=='E'))continue;else if((s[i]=='J'&&s[len-i-1]=='L')||(s[i]=='L'&&s[len-i-1]=='J'))continue;else if((s[i]=='S'&&s[len-i-1]=='2')||(s[i]=='2'&&s[len-i-1]=='S'))continue;else if((s[i]=='Z'&&s[len-i-1]=='5')||(s[i]=='5'&&s[len-i-1]=='Z'))continue;elsereturn 0;}else{if(s[i]=='A'||s[i]=='H'||s[i]=='T'||s[i]=='I'||s[i]=='M'||s[i]=='O'||s[i]=='U'||s[i]=='V'||s[i]=='W'||s[i]=='X'||s[i]=='Y'||s[i]=='1'||s[i]=='8')continue;elsereturn 0;}}return 1;
}
int main()
{int len;char s[50];while(~scanf("%s",s)){len=strlen(s);if(!is_p(s,len)&&!mirror(s,len)){printf("%s -- is not a palindrome.\n\n",s);}else if(is_p(s,len)&&!mirror(s,len)){printf("%s -- is a regular palindrome.\n\n",s);}else if(!is_p(s,len)&&mirror(s,len)){printf("%s -- is a mirrored string.\n\n",s);}else if(is_p(s,len)&&mirror(s,len)){printf("%s -- is a mirrored palindrome.\n\n",s);}}return 0;
}

上面写的代码是很冗余的

所以贴上大牛的优化:

点击打开链接


第二个函数is_mirrored(),这个函数是此题的核心问题

其实也不难写,有些细节问题要注意

首先可以用两个数组把题目中的表格存起来,我看有位同学用了20多个if else 尴尬太狠了,用数组存应该是比较好的办法了。

char const *ch = "AEHIJLMOSTUVWXYZ12358";
char const *re = "A3HILJMO2TUVWXY51SEZ8";

然后在函数内部首先要对只有一个字符的字符串进行特殊情况判断:

if(len == 1)
    {
        for(j=0; j<table_len; j++)
        {
            if(ch[j] == str[0])
                break;
        }
        if(j == 21 || re[j] != str[0])
            return 0;
    }

为什么不用在下面的主循环判断中通过修改判断条件(把i<len/2改为i<len/2+1,这样就比刚才多往后判断一个字符,可以排除len=1时循环一次也不执行的问题)for(i=0; i<len/2 + 1; i++)来排除这个特殊情况呢?

因为这样的话,在多个字符的字符串判定时,每次都要多扫一次,还不如这样来的好些(个人看法)

这个问题解决之后,那就没什么问题了,函数如下:


int is_mirrored(char *str)
{int table_len = strlen(ch);int i,j,len = strlen(str);if(len == 1){for(j=0; j<table_len; j++){if(ch[j] == str[0])break;}if(j == 21 || re[j] != str[0])return 0;}else if(len > 1)for(i=0; i<len/2; i++){for(j=0; j<table_len; j++){if(ch[j] == str[i])break;}	if(j == 21 || re[j] != str[len-i-1])return 0;}return 1;
}



这篇关于UVA 401(palindorme)简单字符串处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056325

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详