zoukankan      html  css  js  c++  java
  • 1033. 旧键盘打字(20)

    原题: https://www.patest.cn/contests/pat-b-practise/1033

    思路: 首先能输出的字符肯定都在想输出的字符串中, 只要一个一个读入字符,
    每次判断这个字符能不能输出即可. 关键问题是, 写根据错误按键序列, 判断
    当前字符能不能打出的函数. 逻辑梳理清晰后不难写出.

    坑1: 如果一个字符都打不出, 输出 ' '
    坑2: 如果没有坏按键, 则全部字符都能打出.

    完整实现:

    #include <stdio.h>
    #include <string.h>
    //  _  .  ,  -      + 
    int isWrongKey (char wrong[], char ch);
    
    int main (void) {
        char wrong[60];     // 错误按键字符串
        char want[100010];  // 想打出的字符串
        int len;            // 想打出字符串长度
        int i;
    
        gets(wrong);
        scanf("%s", want);
        len = strlen(want);
        if (strlen(wrong) == 0) {
        // 如果全部按键都正常
            printf("%s", want);
        } else {
            for (i=0; i<len; i++) {
                if (isWrongKey(wrong, want[i]) == 1) {
                    printf("%c", want[i]);
                }
            }
        }
        printf("
    ");
        return 0;
    }
    
    // 检查当前字符ch, 能不能打出
    // 1能输出, 0不能输出
    int isWrongKey (char wrong[], char ch) {
        int len = strlen(wrong);
        int type; // 2小写字母 3大写字母
        int i;
    
        if (ch >= 'a' && ch <= 'z') type = 2;
        if (ch >= 'A' && ch <= 'Z') type = 3;
    
        // 全部大写坏掉
        for (i=0; i<len; i++) {
            if (wrong[i] == '+' && type == 3) return 0;
        }
        for (i=0; i<len; i++) {
            if (wrong[i] >= 'A' && wrong[i] <= 'Z') {
                // wrong[i]大写字母, ch小写字母
                if (type == 2) {
                    if (wrong[i] == (ch - 32)) return 0;
                }
                // wrong[i]大写字母, ch大写字母
                if (type == 3) {
                    if (wrong[i] == ch) return 0;
                }
            } else {
                // 直接坏键
                if (wrong[i] == ch) return 0;
            }
        }
        // 其它情况, 该键打出
        return 1;
    }
    
  • 相关阅读:
    【iOS】7.4 定位服务->2.1.1 定位
    【iOS】7.4 定位服务->1.0 简介
    1.2.1 OC概述
    5.1 网络基础
    4.4 多线程进阶篇<下>(NSOperation)
    4.3 多线程进阶篇<中>(GCD)
    4.1/4.2 多线程进阶篇<上>(Pthread & NSThread)
    4.0 多线程基础篇
    2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)
    一款面试复习应用源码
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7823151.html
Copyright © 2011-2022 走看看