B1029.旧键盘

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。

输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI

代码样例:

#include "cstdio"
#include "cstring"

int main()
{
    char str1[100],str2[100];
    bool HashTable[128] = {false}; //HashTable数组用来标记字符是否被输出
    gets(str1);
    gets(str2);
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    for(int i=0; i<len1; i++)
    {
        int j;
        char c1,c2;
        for(j=0; j<len2; j++)
        {
            c1 = str1[i];
            c2 = str2[j];
            if(c1 >= 'a' && c1 <= 'z') c1 -= 32; //小写字母转换为大写字母
            if(c2 >= 'a' && c2 <= 'z') c2 -= 32;
            if(c1 == c2) break;  //如果c1在第二个字符串中出现则跳出
        }
        if(j == len2 && HashTable[c1] == false)
        {
            printf("%c",c1);
            HashTable[c1] = true;
        }
    }
    return 0;
}
### C语言键盘测试点4解决方案 在解决与键盘相关的测试点时,通常需要考虑按键的稳定性、重复性和去抖动等问题。以下是基于已有引用内容和专业知识设计的一个完整的解决方案。 #### 1. 按键去抖动处理 为了确保按键信号的准确性,必须加入去抖动逻辑。以下是一个简化版的 `debounce` 函数实现: ```c #include <stdio.h> #include <stdbool.h> bool debounce(int key) { const int DEBOUNCE_DELAY = 50; // 去抖延迟时间(单位:毫秒) static unsigned long lastDebounceTime = 0; unsigned long currentTime = millis(); // 获取当前时间戳 if ((currentTime - lastDebounceTime) >= DEBOUNCE_DELAY) { lastDebounceTime = currentTime; return true; // 表示按键已稳定 } return false; } ``` 此函数通过引入静态变量记录上一次触发的时间,并设置固定的延时阈值来过滤掉不稳定的按键信号[^1]。 --- #### 2. 键盘事件映射 当按键被确认为有效后,可以将其映射到特定的功能或操作。这里提供了一个通用的 `mapKeyToFunction` 实现框架: ```c void mapKeyToFunction(int key) { switch (key) { case 'A': printf("Button A Pressed\n"); break; case 'B': printf("Button B Pressed\n"); break; default: printf("Unknown Key Pressed: %d\n", key); break; } } ``` 该函数根据传入的按键码执行不同的分支逻辑,从而完成具体的业务需求。 --- #### 3. 主循环中的按键检测 在一个典型的嵌套循环结构中,可以通过不断轮询的方式捕获用户的输入并调用相应的处理函数。下面展示了一种可能的设计方式: ```c int main() { int key; while (scanf("%d", &key) != EOF) { // 使用EOF作为终止条件 if (key >= 0) { // 确保只处理有效的正整数按键 handleKeyPress(key); // 调用按键事件处理器 } else { printf("Invalid input detected.\n"); } } return 0; } void handleKeyPress(int key) { if (debounce(key)) { // 验证按键是否已经过滤噪声干扰 mapKeyToFunction(key); // 执行对应的按键功能 } } ``` 上述代码片段实现了从标准输入读取数据直到遇到文件结束符 (`Ctrl+Z`) 的整个流程[^2]。 --- #### 4. 完整代码整合 将以上各部分组合起来即可形成最终版本的应用程序源代码如下所示: ```c #include <stdio.h> #include <stdbool.h> // 模拟获取系统运行时间的方法,在实际应用中需替换为平台特有API unsigned long millis(void); bool debounce(int key) { const int DEBOUNCE_DELAY = 50; // 去抖延迟时间(单位:毫秒) static unsigned long lastDebounceTime = 0; unsigned long currentTime = millis(); if ((currentTime - lastDebounceTime) >= DEBOUNCE_DELAY) { lastDebounceTime = currentTime; return true; // 表示按键已稳定 } return false; } void mapKeyToFunction(int key) { switch (key) { case 'A': printf("Button A Pressed\n"); break; case 'B': printf("Button B Pressed\n"); break; default: printf("Unknown Key Pressed: %d\n", key); break; } } void handleKeyPress(int key) { if (debounce(key)) { mapKeyToFunction(key); } } int main() { int key; while (scanf("%d", &key) != EOF) { if (key >= 0) { handleKeyPress(key); } else { printf("Invalid input detected.\n"); } } return 0; } ``` 注意:由于C标准库并未直接支持跨平台高精度计时器接口,因此此处假设存在一个名为 `millis()` 的辅助方法用于替代真实环境下的硬件特性访问。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值