PAT_B_1033 旧键盘打字

题目描述

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

AC代码

// PAT_1033_Type

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

int main(void)
{
    char Break[50];
    char S_Arr[100010];
    char Err[] = "";
    int len;
    int i, j=0;
    int flag_UP = 0; // 如果flag_UP为0,表示没坏,则大写字母正常输出
    int flag = 1; // 标志每一位是否输出
    int flag_All = 0;

    gets(Break); // 输入键盘的坏键
    gets(S_Arr); // 输入文本段
    
    if (Break == "")
	{
		puts(S_Arr);
		return 0;
	}

    len = strlen(S_Arr);

    // 清除无法显示的字符
    // 先遍历一遍Break,看是否有上档键失灵,如果有定义flag_UP=1不输出大写字母
    while (Break[j] != '\0')
    {
        if (Break[j]=='+')
        {
            flag_UP = 1;
        }
        j++;
    }
    for (i=0; i<len; i++)
    {
        j = 0;
        flag = 1;
        // 挨个遍历S_Arr,如果flag为0 则不输出
        // 首先判断是否是字母,如果不是字母,则不用判断大小写
        // 开始判断字母是否符合
        // 小写字母
        if (S_Arr[i]>='a'&&S_Arr[i]<='z')
        {
            while (Break[j] != '\0')
            {
                if ((S_Arr[i]-'a' == Break[j]-'A'))
                {
                    flag = 0;
                    break;
                }
                j++;
            }
        }
        else if (S_Arr[i]>='A'&&S_Arr[i]<='Z')
        {
            if (flag_UP == 1)
            {
                // 上档键坏了则,大写字母不输出
                flag = 0;
            }
            else
            {
                while (Break[j] != '\0')
                {
                    if (S_Arr[i] == Break[j])
                    {
                        flag = 0;
                        break;
                    }
                    j++;
                }
            }
        }
        else
        {
        	while (Break[j] != '\0')
            {
                if (S_Arr[i] == Break[j])
                {
                    flag = 0;
                    break;
                }
                j++;
            }
		}
        
        if (flag == 1)
        {
            flag_All = 1;
            printf("%c",S_Arr[i]);
        }
    }
    if (flag_All == 0)
    {
    	 printf("");
	}

    return 0;
}

RRR

猜你喜欢

转载自www.cnblogs.com/Robin5/p/11309870.html