首页 > 其他分享 >PAT Basic 1033. 旧键盘打字

PAT Basic 1033. 旧键盘打字

时间:2023-03-17 14:57:06浏览次数:33  
标签:输出 PAT int scanf char broken Basic 1033 输入

PAT Basic 1033. 旧键盘打字

1. 题目描述:

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

2. 输入格式:

输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 \(10^5\) 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,.-+(代表上档键)。题目保证第 2 行输入的文字串非空。

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

3. 输出格式:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

4. 输入样例:

7+IE.
7_This_is_a_test.

5. 输出样例:

_hs_s_a_tst

6. 性能要求:

Code Size Limit
16 KB
Time Limit
200 ms
Memory Limit
64 MB

思路:

遍历输入字符串,判断是否坏键,生成输出字符串即可,这里需要额外处理的就是上档键,定义了标志capBroken,上档键坏了则所有大写字母都不能输出。

另外一个bug点就是可能没有坏键,即第一个输入是空字符串,最开始我用scanf()读入时会导致输入错误,后面改成使用fgets()库函数。

编写程序的关键在于弄清楚输入、输出,以及如何从输入获得输出。

My Code:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    char broken[42]; // 'A-Z' '0-9' '_' ',' '.' '-' '+' 26+10+5 = 41
    char in[100001];
    char out[100001] = "";
    int i, capBroken = 0;
    char * pchar;
    
    //scanf("%s%s", broken, in);
//     scanf("%s", broken);
//     scanf("%s", in);
    
//     gets(broken);
//     gets(in);
    
    //char *fgets(char *buf, int bufsize, FILE *stream);
    fgets(broken, 42, stdin); // first submit testpoint2 reject, for broken maybe null, thus scanf can't get correct input.
    fgets(in, 100001, stdin);
        
//     if(strcmp(in, ""))
//     {
        
//     }
//     printf("broken: %s\nin: %s", broken, in);
    
    //char *strchr(const char *str, int c)
    if(strchr(broken, '+'))
    {
        capBroken = 1; // cap key broken
    }
    
    pchar = out;
    for(i=0; in[i] != '\0'; i++)
    {
        //int toupper(int c);
        if(strchr(broken, toupper(in[i]))) //in[i] is a broken key
        {
            continue;
        }
        else if(in[i] >= 'A' && in[i] <= 'Z' && capBroken)
        {
            continue;
        }
        
        *pchar = in[i];
        pchar++;
    }
    
    *pchar = '\0';
    
    printf("%s\n", out);
    
    return 0;
}

标签:输出,PAT,int,scanf,char,broken,Basic,1033,输入
From: https://www.cnblogs.com/tacticKing/p/17226769.html

相关文章

  • PAT Basic 1031. 查验身份证
    PATBasic1031.查验身份证1.题目描述:一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配......
  • PAT 甲级 1012 The Best Rank(25)
    ToevaluatetheperformanceofourfirstyearCSmajoredstudents,weconsidertheirgradesofthreecoursesonly:C-CProgrammingLanguage,M-Mathematics......
  • PAT Basic 1030. 完美数列
    PATBasic1030.完美数列1.题目描述:给定一个正整数数列,和正整数\(p\),设这个数列中的最大值是\(M\),最小值是\(m\),如果\(M≤mp\),则称这个数列是完美数列。现在给定......
  • PAT Basic 1029. 旧键盘
    PATBasic1029.旧键盘1.题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏......
  • vuex TypeError: Cannot read properties of undefined (reading ‘dispatch‘)
      1、入口文件main.js  2、或者版本不匹配 vue2安装3版本的vuex,默认安装的4版本给vue3用//卸载原来安装的vuexnpmuninstallvuex//安装3.6.2版本的vuexnpm......
  • 使用patch-package定制node_modules 中的依赖包
    背景:首先,需求是这样,Vue项目中使用的是iview第三方UI库,要修改组件DatePicker中默认选中的当日的日期(如下图),实现无论在哪个时区,均显示中国的日期   由于,iview提供的a......
  • singleton pattern
    C1.overviewp1.conceptproblemsPeoplecanusereflectmechanismtocreateotherinstancetoviolatesingleton.ThesafetyofthreadInstructionreordering......
  • diff 命令 , patch
    关于diff命令:      接下来看合并:    关于Patch  ......
  • 解决 The bean 'xxx', defined in class path resource [], could not be registered.
    问题:在实现短信发送拦截功能时,创建了PassportInterceptor验证码拦截器类,使用了@Conponent注解;同时创建了InterceptorConfig拦截器配置类,使用了@Conponent注解,并使用@......
  • spingboot-context-path-默认值以及配置
    springboot项目的context-path的默认值:/可以在application.yml配置文件中自行配置:SpringBoot2.0.0.RELEASE版本以及之后server:port:80servlet:context-path:......