【p1098-字符串的展开】解题记录
来源:互联网 发布:韩国电影推荐 知乎 编辑:程序博客网 时间:2024/06/06 12:22
原题点 这里 。
这是一道简单的模拟题,但是有的地方还是需要周详地考虑的。
同样本题也很适合练习将重用代码分成函数来利用。
还有库函数的应用:
- <cctype> 中的 isdigit(),islower(),toupper() 等可以方便地完成字符串的变换和检查。
- <cstdio> 中的 ungetc() 可以实现 cin.peek() 的功能。
算法方面就没什么知识了……
代码:
#include <cstdio>#include <cctype>using namespace std;int p1, p2, p3;// 等价于 cin.peek();char get_next(){ char next= getchar(); ungetc(next, stdin); return next;}// 按 p1 格式变换 chchar transform(char ch){ if(p1==1) return ch; if(p1==2) return toupper(ch); if(p1==3) return '*';}// 打印 n 次void put_n_times(int n, char ch){ for(int i=0; i<n; ++i) putchar(ch);}// 展开 [beg, end] 区间内的部分// beg 和 end 不要忘记或是重复输出,// 本程序是在主循环里输出 beg 和 end 。void print_range(char beg, char end){ if(p3==1){ for(char i=beg+1; i<end; ++i){ put_n_times(p2, transform(i)); } } else if(p3==2){ for(char i=end-1; i>beg; --i){ put_n_times(p2, transform(i)); } }}int main(){ scanf("%d%d%d\n", &p1, &p2, &p3); char prev='\0', now; while((now=getchar())!=EOF){ char next= get_next(); if(now=='-'){ if((isdigit(prev)&&isdigit(next)&&prev<next)|| (islower(prev)&&islower(next)&&prev<next)){ print_range(prev, next); } else putchar(now); } else putchar(now); prev= now; } return 0;}
0 0
- 【p1098-字符串的展开】解题记录
- P1098 字符串的展开
- 洛谷 P1098 字符串的展开
- 洛谷 P1098 字符串的展开
- 洛谷 P1098 字符串的展开
- 洛谷 P1098 [NOIP2007 T2] 字符串的展开
- 【模拟】洛谷 P1098 字符串的展开
- P1098 字符串展开
- 07noip 字符串的展开 解题报告
- [NOIP2007] 字符串的展开-解题报告
- 解题报告——Noip2007字符串的展开
- NIT-OJ-1022-展开字符串-解题报告
- 字符串的展开
- 字符串的展开
- 字符串的展开
- 字符串的展开
- 【b702】字符串的展开
- 字符串的展开
- Glibc Binutils GCC 配置选项简介
- 【前端】-Dom
- SG3525-频率发生器 驱动芯片
- 读懂芯片后端报告
- 插入排序
- 【p1098-字符串的展开】解题记录
- 拷贝构造函数自己的参数必须是引用类型?
- 完整vs2010+MFC+Opencv,图片显示过程细节(代码详细解析)
- Leetcode的题解收集
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
- 将html代码转化为图片,保存,并发至邮件
- P1892 团伙
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- Event Sourcing in Microservices Using Spring Cloud and Reactor