美文网首页
B1033 旧键盘打字 (20分)——能被打出的结果

B1033 旧键盘打字 (20分)——能被打出的结果

作者: km15 | 来源:发表于2020-01-29 11:00 被阅读0次

// 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;
}

相关文章

  • B1033 旧键盘打字 (20分)——能被打出的结果

    // B1033 旧键盘打字 (20分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。...

  • 1033 旧键盘打字

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打...

  • PAT-B 1033 旧键盘打字(C语言)

    题目 链接:PAT (Basic Level) Practice 1033 旧键盘打字 旧键盘上坏了几个键,于是在...

  • 1033.旧键盘打字

    题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的...

  • 键盘

    言天下之事,形四方之风,谓之雅。 我的键盘,用她打字时间久了,她太妙了。好像能明白我的意思,不用对眼神,打出两个字...

  • 6个超实用网站,让你工作时长减半。

    Tickeys——让你爱上打字 这是一个给打字配音的工具,为你的键盘添加音效。即使没有机械键盘,也能体会机械键盘的...

  • 1033 旧键盘打字 (20 分)

    此题得分17,测试点4暂未通过

  • pat1033

    1033 旧键盘打字 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该...

  • 论打字

    手机键盘打字好还是实体键盘打字好?

  • 随笔

    我这个是随便写,只是突发感慨而已,我原来自己打字都是打字很慢的,要看键盘拼音才能够打出字体出来而已,现在想想就是很...

网友评论

      本文标题:B1033 旧键盘打字 (20分)——能被打出的结果

      本文链接:https://www.haomeiwen.com/subject/whcmthtx.html