C++信奥之径,锻炼思维,扎实算法——模拟与高精度算法(8)

摘要:但是由于“-”和数字的ASCII码都小于各字母,因此对字母的判断可以顺带过滤到(2)和(3)的情况。

字符串的展开

题目描述

算法解析

1、根据题意,我们需要考虑“-”出现的多种情况:

(1)“-”两端都是字符或数字,题目已经约定了右边严格大于左边,因此直接根据p的规则生成;

(2)“-”两端一边是字符一边是数字,那么保持原样;

(3)“-”连续出现,还是照常输出。

但是由于“-”和数字的ASCII码都小于各字母,因此对字母的判断可以顺带过滤到(2)和(3)的情况。

2、因此,整体代码只需要读入3个参数和字符串后,判断每个字符的情况。

如果不是“-”,就原样输出,如果是“-”,那么判断两端得是数字、小写字母或大写字母的成对出现,才根据规则生成,否则都是原样输出。

3、可以使用头文件#include中的函数和三目运算符来简化代码,具体操作还请读者们在看哇参考代码后,自行思考并改进。

【参考代码】

#include#includeusing namespace std;int main{ int p1,p2,p3; cin>>p1>>p2>>p3; string s; cin>>s; for(int i=0;i='0' && s[i+1]='A' && s[i+1]='a' && s[i+1]='A') tmp=j+32; else tmp=j; for(int k=0;k

s[i-1];j--){ if(p1==1){ char tmp; if(j='A') tmp=j+32; else tmp=j; for(int k=0;k

(左右滑动查看完整代码)

代码中的C++知识解读

cctype头文件

在C++中,头文件提供了非常丰富的用于字符处理的函数,常用的有以下这些:

初始化:int ch; 或 char ch;

(1)判断类

isalpha(ch):判断字符是否为字母;

isdigit(ch):判断字符是否为数字;

isalnum(ch):判断字符是否为字母或数字;

islower(ch):判断字符是否为小写字母;

isupper(ch):判断字符是否为大写字母;

isspace(ch):判断字符是否为空白字符(空格、换行、制表符等)

isblank(ch):判断字符是否为空格;(C++11新增)

ispunct(ch):判断是否为标点符号;

isxdigit(ch):判断是否为十六进制字符;

(2)数据处理类

tolower(ch):将ch转换为小写字母,如果不能则不变化;

toupper(ch):将ch转换为大写字母,如果不能则不变化;

如果能尽可能记下这个头文件以及对应的函数,在字符串处理上面可以方便不少!

运行结果

在“模拟与高精度”题单中,还有很多优秀的题目,这些题目的基本算法都是根据题意使用代码模拟过程,同时注意细节上的判断。

来源:走近教育

相关推荐