摘要:但是由于“-”和数字的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;ks[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转换为大写字母,如果不能则不变化;
如果能尽可能记下这个头文件以及对应的函数,在字符串处理上面可以方便不少!
运行结果
在“模拟与高精度”题单中,还有很多优秀的题目,这些题目的基本算法都是根据题意使用代码模拟过程,同时注意细节上的判断。
来源:走近教育