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

    题目

    /*
     1033. 旧键盘打字(20)
     
    
     
     旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
     
     输入格式:
     
     输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
     
     注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
     
     输出格式:
     
     在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
     
     输入样例:
    7+IE.
    7_This_is_a_test.
     输出样例:
     _hs_s_a_tst
     */
    

    思路

    // 上档键是否影响中英文输入法
    
    // 判断输入的字符对应的按键是否损毁
    // 设置 使得 'A' = 'a' + '+';
    
    

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    bool brokenKeys[257];
    
    int main(){
    	// 存入坏键
    	char str[100005];
    	memset(brokenKeys, 0, sizeof(brokenKeys));
    //	scanf("%s",str);
    	gets(str); //scanf无法读入空串
    	for (int i = 0; str[i]; ++i) {
    		char ch = str[i];
    		brokenKeys[ch] = 1;
    		// 小写字母也无法打印
    		if (ch >= 'A' && ch <= 'Z') {
    			ch = ch - 'A' + 'a';
    			brokenKeys[ch] = 1;
    		}
    	}
    //	if(strlen(str)!=0)getchar();// 过滤换行符 使用scanf的时候需要过滤,使用gets则不需要
    	
    	// 处理输入字符
    	char ch;
    	while(scanf("%c",&ch) != EOF){
    		// 判断这个符号能否打出来
    		if(brokenKeys[ch] == 0){
    			
    			// 如果要打印大写字母,需要额外判断上档键
    			if (ch >= 'A' && ch <= 'Z' && brokenKeys['+'] == 1) {
    				continue;
    			}
    			cout << ch;
    		}
    	}
    	return 0;
    }
    

    过程资料

    注意点:

    1. scanf读取字符串与gets读取的差异。

    测试点:

    1. 第二个测试点是特例,是一个第一行为空的例子。
      文中说了保证第二行不空,那么就应该想到第一行可能为空
  • 相关阅读:
    实验一框架选择及其分析
    站立会议(一)
    关于有多少个1的计算
    寻找水王问题
    如何买到更便宜的书
    NABCD
    二维数组首尾相连求最大子矩阵
    环数组求最大子数组的和
    二维数组求最大矩阵
    关于铁道大学基础教学楼电梯调查
  • 原文地址:https://www.cnblogs.com/tangyikejun/p/4300405.html
Copyright © 2011-2022 走看看