首页 > 试题广场 >

旧键盘打字(20)

[编程题]旧键盘打字(20)
  • 热度指数:14654 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

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


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

输入

7+IE.
7_This_is_a_test.

输出

_hs_s_a_tst

那个大哥给我看看怎么事  提交全部答案错误但是错误系统给不出来啊

import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
    public static void main(String args[]) {
        Scanner in=new Scanner(System.in);
       String a=in.nextLine();
       char[]a1=a.toCharArray();
       String b=in.nextLine();
       char[]b1=b.toCharArray();
       int k=0;
       char[]c=new char[b1.length];
       if(a.contains("+")) {
           for(int i=0;i<b1.length;i++) {
               if(!(b1[i]>'A'&&b1[i]<'Z')) {
                   c[k]=b1[i];
                   k++;
               }
           }
       }
       if(a.contains("+")) {
           for(int i=0;i<c.length;i++) {
               boolean f=true;
               if(c[i]>'A'&&c[i]<'Z') {
                   c[i]+='a'-'A';
               }
               for(int j=0;j<a1.length;j++) {
                   if(a1[j]>'A'&&a1[j]<'Z') {
                       a1[j]+='a'-'A';
                   }
                   if(c[i]==a1[j]) {
                       f=false;
                   }
               }
               if(f==true) {
                   System.out.print(c[i]);
               }
           }
        }
       if(!a.contains("+")) {
       for(int i=0;i<b1.length;i++) {
           boolean f=true;
           if(b1[i]>'A'&&b1[i]<'Z') {
               b1[i]+='a'-'A';
           }
           for(int j=0;j<a1.length;j++) {
               if(a1[j]>'A'&&a1[j]<'Z') {
                   a1[j]+='a'-'A';
               }
               if(b1[i]==a1[j]) {
                   f=false;
               }
           }
           if(f==true) {
               System.out.print(b1[i]);
           }
       }
    }
    }
}





发表于 2021-09-25 19:06:28 回复(0)
import java.util.Scanner;
public class p1023{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String bad = sc.next();
        String input = sc.next();
        boolean b = false;
        if(bad.indexOf("+") >= 0){
            b = true;
        }
        String tran = bad.toLowerCase();
        for (int i = 0;i < input.length() ;i++ ) {
            char c = input.charAt(i);
            if (b) {
                if (c >= 'A'&&c <= 'Z') {
                    continue;
                }
            }else if(!b){
                if (bad.indexOf(c) >= 0) {
                    continue;
                }
            }
            if (tran.indexOf(c) >= 0) {
                continue;
            }
            System.out.print(c);
        }
    }
}
发表于 2020-03-24 13:34:44 回复(0)
求助,我在eclipse测试通过,但是在pat上测试显示部分数据正确以及返回非零是怎么回事呀,我感觉我的代码没错呀!
import java.util.ArrayList;
import java.util.Scanner;
public class Main {		
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s1=sc.next().toLowerCase();
		String s2=sc.next();
		char[] a2=s2.toCharArray();
		ArrayList<Character> list=new ArrayList<>();
		for (int i = 0; i < a2.length; i++) {
			String s=String.valueOf(a2[i]);
			if (!s1.contains(s)) {					
				list.add(a2[i]);										
			}
		}
		for (int i = 0; i < list.size(); i++) {
			while(list.get(i)>='A'&&list.get(i)<='Z') {
				list.remove(i);
			}			
		}
		for (Character c : list) {
			System.out.print(c);
		}
		
	}	
}


编辑于 2020-03-09 15:39:54 回复(0)
把不能出现的字符放入HashSet里,这样查出除不能放的字符复杂度几乎就是O(1),这样整个是线性复杂度。
import java.util.*;

public class Main{
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
        char ch;
        boolean flag = false;
        HashSet<Character> set = new HashSet<Character>();
        for (int i = 0; i < str1.length(); i++) {
        	ch = str1.charAt(i);
			if(ch == '+')flag = true;
			else if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))set.add((char)(ch ^ 32));
			set.add(ch);  // 这里把大小写都放进去,因为键盘坏了,大小写都不能出现
		}
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < str2.length(); i++){
        	ch = str2.charAt(i);
        	if(!set.contains(ch)){
        		if(flag && (ch >= 'A' && ch <= 'Z')) continue;
        		sb.append(ch);
        	}
        }
        System.out.println(sb.toString());
    }
}


发表于 2019-08-20 17:50:28 回复(0)
这个题目有个地方有点坑,就是    'L'+32==',' 是成立的


import java.util.Scanner;

public class demo23 {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String check_item=sc.next();
char[] check=check_item.toCharArray();
String input_all=sc.next();
char[] input=input_all.toCharArray();
boolean mark=false;
int clen=check.length;
for(int i=0; i<clen; i++) {
if(check[i]=='+') {
mark=true;
for(int j=i; j<clen-1; j++) {
check[j]=check[j+1];
}
check[clen-1]='\0';
clen--;
break;
}
}
int ilen=input.length;
if(mark) {
for(int i=0; i<ilen; i++) {
if(65 <= input[i] && input[i] <= 90) {
for(int j=i; j<ilen-1; j++) {
input[j]=input[j+1];
}
input[ilen-1]='\0';
ilen--;
i--;
}
}
}
for(int i=0; i<ilen; i++) {
boolean flag=true;
for(int j=0; j<clen; j++) {
if((input[i] == check[j]+32 && (65 <=check[j] && check[j] <= 90)) || input[i]==check[j]) {
flag=false;
break;
}
}
if(flag) {
System.out.print(input[i]);
}
}
sc.close();
}

}
编辑于 2019-03-21 00:00:57 回复(0)
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char brokens[] = br.readLine().toCharArray();
        boolean exit_shift = exit('+', brokens);
        //char out[]=new char[20+1];
        int temp;
        for (int i = 0; (temp = br.read()) != -1; ) {
            char a = (char) temp;
            if (!((exit_shift && a >= 'A' && a <= 'Z') || exit(a, brokens))) {
                System.out.print(a);
            }
        }


    }

    static boolean exit(char a, char chars[]) {
        for (char c : chars) {
            if (c == a) {
                return true;
            } else if ('A' <= c && 'Z' >= c && (int) (a - c) == 32) {
                return true;
            }
        }
        return false;
    }
}

发表于 2019-03-01 14:11:40 回复(0)
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[] badArr = scanner.nextLine().toCharArray();
        char[] arr = scanner.nextLine().toCharArray();
        scanner.close();
        List<Character> list1 = new LinkedList<Character>();
        for (Character c : arr) {
            list1.add(c);
        }
        List<Character> list2 = new LinkedList<Character>();
        for (Character c : badArr) {
            if (c >= 'A' && c <= 'Z') {
                list2.add(c);
                list2.add(Character.toLowerCase(c));
            } else {
                if(c == '+') {
                    for(char ck = 'A';ck < 'Z';ck++) {
                        list2.add(ck);
                    }
                }else {
                    
                    list2.add(c);
                }
            }
        }
        list1.removeAll(list2);
        for (Character c : list1) {
            System.out.print(c);
        }
    }
}
发表于 2018-03-27 16:18:03 回复(0)
用正则表达式,不写循环
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
         
        String badKeys = bufferedReader.readLine();
        String text = bufferedReader.readLine();
         
        if(badKeys.indexOf('+') != -1) {
            text = text.replaceAll("[A-Z]", "");
        }
        if(badKeys.indexOf('-') != -1) {
            text = text.replaceAll("[-]", "");
            badKeys = badKeys.replaceAll("[-]", "");
        }
         
        final String regexBadKeys = "[" + badKeys + "]|[" + badKeys.toLowerCase() + "]";
         
        text = text.replaceAll(regexBadKeys, "");
         
        System.out.println(text);
    }
}

编辑于 2017-11-22 15:53:50 回复(1)
 import java.util.Scanner;
 public class Main {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    String badStr = sc.next();
    String allStr = sc.next();
    sc.close();

    for(int i=0;i<badStr.length();i++){
        if(contain(allStr,badStr.charAt(i))){        
            char chr = badStr.charAt(i);            //除去坏键字母
            allStr = allStr.replace(String.valueOf(chr), "");
            allStr = allStr.replace(String.valueOf(Character.toLowerCase(chr)), "");
        }else if(contain(badStr,'+')){
            allStr = allStr.replaceAll("[A-Z]+", "");//除去大写字母
        }
    }
    System.out.println(allStr);
}
static boolean contain(String str,char c){    //判断字符串中是否包含坏键
    boolean flag = false;
    c = Character.toUpperCase(c);
    for(int i=0;i<str.length();i++){
        char chr = Character.toUpperCase(str.charAt(i));
        if(c==chr) flag = true;
    }
    return flag;
}

}

编辑于 2017-03-28 10:53:38 回复(0)
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Scanner;
 
publicclassMain {
    publicstaticvoidmain(String[] args){
        List list = newArrayList();
        Scanner in = newScanner(System.in);
        char[] bad = in.nextLine().toCharArray();
        char[] fact = in.nextLine().toCharArray();
        booleanupCheck = true;//默认 + 号没有坏
        for(inti = 0; i < bad.length; i++){
            if(!list.contains(bad[i])){
                list.add(bad[i]);
                if('Z'-bad[i] <=26&& 'Z'-bad[i] >=0)
                list.add((char)((int)bad[i]+32));
            }
        }
        if(list.contains('+')) upCheck = false;
         
        for(inti = 0; i < fact.length; i++){
            if(upCheck){
                if(!list.contains(fact[i])){
                    System.out.print(fact[i]);
                }
            }else{
                if(!list.contains(fact[i]) && !('Z'-fact[i] <=26&& 'Z'-fact[i] >=0)){
                    System.out.print(fact[i]);
                }
            }
             
        }
    }
 
}
编辑于 2016-09-22 10:36:38 回复(0)

问题信息

难度:
10条回答 31490浏览

热门推荐

通过挑战的用户