简单密码 题目

HJ21 简单密码

描述

现在有一种密码变换算法。

九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.

而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。

数字和其它的符号都不做变换。

数据范围: 输入的字符串长度满足 1≤𝑛≤100 1≤n≤100

输入描述:

输入一组密码,长度不超过100个字符。

输出描述:

输出密码变换后的字符串

示例:

输入:YUANzhi1987
输出:zvbo9441987

 
 

分析:

​ 1.分区,分为小写字母,大写字母和数字。

​ 2.再分别进行处理。

 
 

代码:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s=sc.nextLine();
        if(s.length()>101){
            System.out.println("非法输入!");
            return;
        }

        char c;
        String ss="";
        for (int i = 0; i < s.length(); i++) {
            c=s.charAt(i);
            if(c>='a'&&c<='z'){
                switch (c){
                    case 'a': case  'b': case 'c':ss+=2;break;
                    case 'd': case  'e': case 'f':ss+=3;break;
                    case 'g': case  'h': case 'i':ss+=4;break;
                    case 'j': case  'k': case 'l':ss+=5;break;
                    case 'm': case  'n': case 'o':ss+=6;break;
                    case 'p': case  'q': case 'r': case 's':ss+=7;break;
                    case 't': case  'u': case 'v':ss+=8;break;
                    case 'w': case  'x': case 'y': case 'z':ss+=9;break;
                    default:
                        System.out.println("非法数据!");

                }
            }else if(c>='A'&&c<='Z'){
                if(c=='Z'){
                    ss+='a';
                }else {
                    ss+=(char)(c+32+1);
                }
               
            }else if(c>='0'&&c<='9'){
                ss+=c;
            }
        }

        System.out.println(ss);
    }
}

 

 
 

大佬代码:

使用HashMap进行存储。

使用contains判断是否包括某字母。

import java.util.*;
 
public class Main{
    //定义map容器存储按键对应数字字符的容器
    private static Map<String,String> map = new HashMap<>();
    //静态初始化、加载map容器
    static{
        map.put("1","1");
        map.put("abc","2");
        map.put("def","3");
        map.put("ghi","4");
        map.put("jkl","5");
        map.put("mno","6");
        map.put("pqrs","7");
        map.put("tuv","8");
        map.put("wxyz","9");
        map.put("0","0");
    }
     
    public static void main(String[] args){
       Scanner scanner = new Scanner(System.in);
       while(scanner.hasNext()){
           String str = scanner.nextLine();
           char[] chars = str.toCharArray();
           //构造buffer容器存储转换后的字符串
           StringBuffer buffer = new StringBuffer();
           for(char c : chars){
               //如果是正整数则不需要进行加密
               if(c>='0'&& c<='9'){
                    buffer.append(String.valueOf(c));
                }else if(c>='A'&& c<='Y'){ //如果是A~Y的大写字母则需要将其+32位转换成小写再向后移1位
                    char newChar = (char)(c+32+1);
                    buffer.append(String.valueOf(newChar));
                }else if(c=='Z'){ //如果是Z则加密成a
                    buffer.append("a");
                }else{
                //去除map容器中的key与字符进行校验并加密
                Set<String> keys = map.keySet();
                for(String k : keys){
                    if(k.contains(String.valueOf(c)))
                        buffer.append(map.get(k));
                }
               }
           }
           System.out.print(buffer.toString());
       }
    }
}

 
 
 

全使用if语句。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char c[] = str.toCharArray();
        for(int i = 0; i<str.length() ; i++){
            if(c[i]>='A'&&c[i]<='Z'){
                if(c[i]+32 != 'z')
                    c[i] += 33;
                else
                    c[i] = 'a';
            }
            else if(c[i]=='a'||c[i]=='b'||c[i]=='c')
                c[i]='2';
            else if(c[i]=='d'||c[i]=='e'||c[i]=='f')
                c[i]='3';
            else if(c[i]=='g'||c[i]=='h'||c[i]=='i')
                c[i]='4';
            else if(c[i]=='j'||c[i]=='k'||c[i]=='l')
                c[i]='5';
            else if(c[i]=='m'||c[i]=='n'||c[i]=='o')
                c[i]='6';
            else if(c[i]=='p'||c[i]=='q'||c[i]=='r'||c[i]=='s')
                c[i]='7';
            else if(c[i]=='t'||c[i]=='u'||c[i]=='v')
                c[i]='8';
            else if(c[i]=='w'||c[i]=='x'||c[i]=='y'||c[i]=='z')
                c[i]='9';
            System.out.print(c[i]);
        }
        System.out.println();
    }
}

 
 
 

分段判断。

import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            String cleartext = in.nextLine();    //读取明文
             
            StringBuilder builder = new StringBuilder();
            for(int i=0; i < cleartext.length(); i++){
                //小写字母转换为数字
                if(cleartext.charAt(i)>='a' && cleartext.charAt(i)<='c')
                    builder.append('2');
                else if(cleartext.charAt(i)>='d' && cleartext.charAt(i)<='f')
                    builder.append('3');
                else if(cleartext.charAt(i)>='g' && cleartext.charAt(i)<='i')
                    builder.append('4');
                else if(cleartext.charAt(i)>='j' && cleartext.charAt(i)<='l')
                    builder.append('5');
                else if(cleartext.charAt(i)>='m' && cleartext.charAt(i)<='o')
                    builder.append('6');
                else if(cleartext.charAt(i)>='p' && cleartext.charAt(i)<='s')
                    builder.append('7');
                else if(cleartext.charAt(i)>='t' && cleartext.charAt(i)<='v')
                    builder.append('8');
                else if(cleartext.charAt(i)>='w' && cleartext.charAt(i)<='z')
                    builder.append('9');
                 
                //大写字母'A'~'Y'转换
                else if(cleartext.charAt(i)>='A' && cleartext.charAt(i)<='Y')
                    builder.append((char)(cleartext.charAt(i)+'a'-'A'+1));
                //大写字母'Z'单独处理
                else if(cleartext.charAt(i) == 'Z')
                    builder.append('a');
                 
                //其他字符不做变换
                else
                    builder.append(cleartext.charAt(i));
            }
            System.out.println(builder.toString());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值