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中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques