【再思考】PATBasic——1033. 旧键盘打字(20)
2015-06-29 09:39
375 查看
1033. 旧键盘打字(20)
时间限制200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:
7+IE. 7_This_is_a_test.
输出样例:
_hs_s_a_tst
#include<vector> #include <sstream> #include<cmath> #include<iomanip> #include<iostream> #include <ctype.h> #include <stdlib.h> using namespace std; int main() { string a, b; cin >> a >> b; //a = "7IE."; //b = "7_This_is_a_test."; int ifcap= a.find('+'); vector<char> outputs; if (ifcap >= 0)//如果字符串中包含加号 { for (int i = 0; i < b.length(); i++) { char bi = b[i]; if (!isupper(bi))//如果不是大写字母,进行以下操作 { int flag = 0; for (int j = 0; j < a.length(); j++) { if (bi == a[j]) { break; } else if ((isalpha(bi)) && (abs(bi - a[j]) == 32))//判断是否为字母,且不区分大小写 { break; } else//注意这里不能直接push_back,应该是与a中字符都对应判断过了,没有出现,再放入容器中 { flag++; } } if (flag == a.size()) { outputs.push_back(bi); } } else//如果是大写字母,直接跳到下一字符 { continue; } } } else//如果不包含加号 { for (int i = 0; i < b.length(); i++) { char bi = b[i]; int flag = 0; for (int j = 0; j < a.length(); j++) { if (bi == a[j]) { break; } else if ((isalpha(bi)) && (abs(bi - a[j]) == 32)) { break; } else { flag++; } } if (flag == a.size()) { outputs.push_back(bi); } } } if (outputs.size() == 0) { cout << endl; } else { for (int i = 0; i < outputs.size(); i++) { cout << outputs[i]; } } return 0; }
第二版本,得分20分。回头想想,这题真的不难,居然还能把我纠结这么久!总结经验:
1、读题,理解清楚题意很重要!每个题拿到后,认真读题,分析,在纸上写下思路,然后才开始写代码;
2、用if-else的时候,要注意,考虑了if,就要对应到else,不要想当然的以为是自己考虑的那些情况,其实很多时候,都会漏掉边界条件
#include<vector> #include <sstream> #include<cmath> #include<iomanip> #include<iostream> #include <ctype.h> #include <stdlib.h> #include <algorithm> using namespace std; bool IfinAstr(char c, string a)//函数判断字符c是否在字符串a中,返回bool型的变量 { bool temp = false; for (int i = 0; i < a.length(); i++) { if (c == a[i]) { temp = true; } } return temp; } int main() { string a, b; getline(cin, a); getline(cin, b); if (a == "")//一定要注意这里,a有可能是空 { cout << b; } else { bool ifupper = false;//默认大写键是好的。可以输出大写字母 int num = a.find('+'); if (num >= 0) { ifupper = true; } for (int i = 0; i < b.length(); i++) { char c = b[i]; if (isalpha(c))//如果是字母 { if (isupper(c))//如果是大写字母 { if ((ifupper == false) && (!IfinAstr(c, a)))//如果上档键没坏,且该字符不在a里 { cout << c; } else { continue; } } else//如果是小写字母 { if (!IfinAstr(toupper(c), a))//判断其对应的大写字母是否在其中 { cout << c; } else { continue; } } } else//如果不是字母 { if (!IfinAstr(c, a)) { cout << c; } else { continue; } } } } return 0; }
相关文章推荐
- DELL硬件监控OMSA客户端版
- OJ第二批——Problem I:改错题:类中私有成员的访问
- java-web-j2e学习建议路线
- 多线程编程(五)--线程池
- 边缘检测子综述(A review of classic edge detectors[J]. Image Processing On Line, 2012.)
- 登录shell与非登录shell读取文件过程
- 黑马程序员——java基础之异常
- APP界面设计之尺寸篇
- Python中if __name__ == '__main__'作用解析
- mysql几种存储引擎介绍
- Linux系统递归生成目录中文件的md5的方法
- IEnumerable和IEnumerator 详解
- 浅谈凸优化问题中的Bregman迭代算法
- 多线程编程(四)--线程同步
- java迷宫算法
- 执行sql语句后的数据处理api
- LeetCode_62---Unique Paths
- 学习的地址网站
- refinerycms
- java线程堆栈问题定位第二讲:多线程中的锁解读