B1033 旧键盘打字 (20分)——能被打出的结果
2020-01-29 本文已影响0人
km15
// B1033 旧键盘打字 (20分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
考察:给出坏键跟一串字符,打出好的,(hash)
编程思想:
编程思想:
1、输入第一个字符,如果是大写字母就转为小写字符,把hashtable置为false
2、输入第二个字母,如果是大写字母,+档并且hashtable都成立,就可以输出大写,不是的话,判断hashTABLE是否成立,成立则输出,不然不输出
其中对应英文字母的坏键以大写给出,这里是告诉你大小写都不能输出了!
learn && wrong;
1、hashtable所有应该是256;
2、大写化为小写是,str[i] - 'A' + 'a',也可以单独,弄成+32,不过要暂存在char c中,直接输出c - 32,是个数字
3、思路值得学习
4、memset函数,可以设置true,其实因为true是单个字节,memset只针对单个字节,参数(数组,字节,sizeof()),头文件是<string.h>,另外menset可以用于结构体,结构体数组
*/
#include <iostream>
#include <cstring>
using namespace std;
bool hashtable[256]; //(!!!)初始全是false
char str1[100005];
char str2[100005];
void init() {
for (int i = 0;i < 128;++i) {
hashtable[i] = true;
}
}
int main()
{
cin >> str1 >> str2; //输入两行字符
int len1 = strlen(str1);
int len2 = strlen(str2);
bool flag = true;
init();
for (int i = 0;i < len1;++i) { //hash置为false
char c1 = str1[i];
if (c1 >= 'A' && c1 <= 'Z') c1 += 32; //-'A'是转为数字,而不是转为小写,加32才是
hashtable[c1] = false;
//if (c1 == '+') flag = false;
}
for (int j = 0;j < len2;++j) {
char c2 = str2[j];
if (hashtable['+'] == false && (c2 >= 'A' && c2 <= 'Z')) continue; //短路了,flag必定为false,c2也大于等于A
else if (hashtable[c2] == false) continue;
else cout << c2;
}
cout << endl;
}
// 正确答案,B1033 旧键盘打字 (20分)——能被打出的结果.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
编程思想:
1、输入第一个字符,如果是大写字母就转为小写字符,把hashtable置为false
2、输入第二个字母,如果是大写字母,+档并且hashtable都成立,就可以输出大写,不是的话,判断hashTABLE是否成立,成立则输出,不然不输出
*/
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 100010;
char str[maxn];
bool hashtable[256];
void intit() {
for (int i = 0;i < 256;++i) {
hashtable[i] = true;
}
}
int main()
{
cin >> str;
intit();
int len = strlen(str);
for (int i = 0;i < len;++i) {
if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
hashtable[str[i]] = false;
}
cin >> str;
len = strlen(str);
for (int i = 0;i < len;++i) {
if (str[i] >= 'A' && str[i] <= 'Z')
{
int low = str[i] - 'A' + 'a';
if (hashtable['+'] == true && hashtable[low] == true) { //这个并不是判断小写是否成立,而是判断大写是否为真,肯定是真啊
cout << str[i];
}
}
else if (hashtable[str[i]] == true) cout << str[i];
}
printf("\n");
return 0;
}