现需要设计一个字符串加密程序String getHint(String str, String key),该程序接收两个字符串变量分别为str和key,加密规则如下: 1.当str与key相同位置字符相同时,显示该字符; 2.当str与key相同位置字符不同且str中出现key中包含的字符时,str中该字符加密为+; 3.当str中某个字符不存在上述两种情况的字符加密为*。 函数调用示例: getHint("AAAAA","HARPS"); //+A+++ getHint("HELLO","HARPS"); //H**** getHint("HEART","HARPS"); //H*++* 说明:只需要补全public static String getHint(String str, String key)静态方法即可 输入样例: AAAAA HARPS 输出样例: +A+++ 裁判测试程序样例: import java.util.Scanner; public class Main { public static String getHint(String str, String key) { /* 请在这里填写答案 */ } public static void main(String[] args) { Scanner in=new Scanner(System.in); String str=in.nextLine(); String key=in.nextLine(); System.out.println(getHint(str,key)); } }
时间: 2024-01-28 11:05:31 浏览: 243
请参考以下代码:
```
public static String getHint(String str, String key) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c1 = str.charAt(i);
char c2 = key.charAt(i);
if (c1 == c2) {
sb.append(c1);
} else if (str.indexOf(c2) != -1) {
sb.append("+");
} else {
sb.append("*");
}
}
return sb.toString();
}
```
该方法中,我们使用 StringBuilder 来拼接加密后的字符串。对于每个字符,我们先判断是否与 key 中相应位置的字符相同,如果相同则直接添加到 StringBuilder 中。如果不同,我们判断该字符是否在 key 中出现过,如果出现过则添加 +,否则添加 *。最后返回 StringBuilder 转换成的字符串。
相关问题
public class MD5Util { /** * @param text明文 * @param key密钥 * @return 密文 */ // 带秘钥加密 public static String md5(String text) { // 加密后的字符串 String md5str = DigestUtil.md5Hex(text); return md5str; } }
根据代码分析,MD5Util 类中的 md5 方法似乎是用于进行 MD5 加密的。该方法接收一个 String 类型的参数 text,表示要进行加密的明文字符串。然后使用 DigestUtil 类中的 md5Hex 方法对 text 进行加密,并将加密后的结果以字符串形式返回。
需要注意的是,该方法并没有提供密钥参数,因此它使用的是无秘钥加密方式。如果需要进行带秘钥的加密,需要使用其他方法或者对该方法进行修改。
另外,需要注意代码中使用的 DigestUtil 类的来源和实现,如果该类不在当前代码中,需要先导入或者添加该类的依赖。
请你将代码修改为用MASM汇编public class Test { public static final int KEY = 7; public static void main(String[] args) { String str = "Hello World!"; StringBuffer str2 = new StringBuffer(); //存储加密后的字符串 StringBuffer str3 = new StringBuffer(); //存储解密后的字符串 //加密过程 for(int i=0;i<str.length();i++) { char c = (char)(str.charAt(i) ^ KEY); str2.append(c); } //解密过程 for(int i=0;i<str2.length();i++) { char c = (char)(str2.charAt(i) ^ KEY); str3.append(c); } System.out.println("原始 的字符串为:" + str); System.out.println("加密后 的字符串为:" + str2); System.out.println("解密后 的字符串为:" + str3); } } 输出: 格式为DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS END START
对于Java程序的转换,需要进行以下步骤:
1. 将Java代码转换为汇编代码,使用Java虚拟机(JVM)来执行Java程序,然后将其转换为汇编代码。
2. 根据汇编代码的语法规则,将其转换为MASM汇编代码。
下面是Test.java转换为汇编代码的示例:
```
.class public Test
.super java/lang/Object
.field public static final KEY:I = 7
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 3
ldc "Hello World!"
astore_1
new java/lang/StringBuffer
dup
invokespecial java/lang/StringBuffer/<init>()V
astore_2
new java/lang/StringBuffer
dup
invokespecial java/lang/StringBuffer/<init>()V
astore_3
iconst_0
istore 4
loop:
iload 4
aload_1
invokevirtual java/lang/String/length()I
if_icmpge end_loop
aload_1
iload 4
invokevirtual java/lang/String/charAt(I)C
iload_0
ixor
i2c
invokevirtual java/lang/StringBuffer/append(C)Ljava/lang/StringBuffer;
pop
iinc 4, 1
goto loop
end_loop:
iconst_0
istore 4
loop2:
iload 4
aload_2
invokevirtual java/lang/StringBuffer/length()I
if_icmpge end_loop2
aload_2
iload 4
invokevirtual java/lang/StringBuffer/charAt(I)C
iload_0
ixor
i2c
invokevirtual java/lang/StringBuffer/append(C)Ljava/lang/StringBuffer;
pop
iinc 4, 1
goto loop2
end_loop2:
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "原始的字符串为:"
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
aload_1
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "加密后的字符串为:"
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
aload_2
invokevirtual java/lang/StringBuffer/toString()Ljava/lang/String;
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "解密后的字符串为:"
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
aload_3
invokevirtual java/lang/StringBuffer/toString()Ljava/lang/String;
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
```
下面是将上述汇编代码转换为MASM汇编代码的示例:
```
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
DW 64 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
; 初始化局部变量
MOV CX,0 ; i=0
MOV DX,0 ; 存储加密后的字符串的下标
MOV BX,0 ; 存储解密后的字符串的下标
; 加密过程
loop1:
MOV AX,CX
PUSH AX
MOV AX,DATAS+1
PUSH AX
CALL java/lang/String/length
ADD SP,4
CMP AX,CX
JLE end_loop1
MOV AX,CX
PUSH AX
MOV AX,1
PUSH AX
MOV AX,DATAS+3
MOV BX,DX
ADD AX,BX
MOVZX BX,WORD PTR [AX]
MOV AX,DATAS+2
MOV CX,7
XOR BX,CX
MOV CX,BX
MOV AX,DATAS+5
MOV BX,DX
ADD AX,BX
MOV BYTE PTR [AX],CL
INC DX
ADD SP,4
JMP loop1
end_loop1:
MOV CX,0
MOV BX,0
; 解密过程
loop2:
MOV AX,CX
PUSH AX
MOV AX,DATAS+1
PUSH AX
CALL java/lang/StringBuffer/length
ADD SP,4
CMP AX,CX
JLE end_loop2
MOV AX,CX
PUSH AX
MOV AX,1
PUSH AX
MOV AX,DATAS+7
MOV BX,BX
ADD AX,BX
MOVZX BX,WORD PTR [AX]
MOV AX,DATAS+6
MOV CX,7
XOR BX,CX
MOV CX,BX
MOV AX,DATAS+9
MOV BX,BX
ADD AX,BX
MOV BYTE PTR [AX],CL
INC BX
ADD SP,4
JMP loop2
end_loop2:
; 输出结果
MOV DX,OFFSET FLAT:DATAS+10
MOV AH,9
INT 21h
MOV DX,DATAS+1
MOV AH,9
INT 21h
MOV DX,OFFSET FLAT:DATAS+11
MOV AH,9
INT 21h
MOV DX,DATAS+7
MOV AH,9
INT 21h
MOV DX,DATAS+12
MOV AH,9
INT 21h
MOV DX,DATAS+7
MOV AH,9
INT 21h
MOV DX,DATAS+13
MOV AH,9
INT 21h
MOV DX,DATAS+7
MOV AH,9
INT 21h
MOV DX,DATAS+14
MOV AH,9
INT 21h
MOV AX,4C00h
INT 21h
CODES ENDS
END START
```
请注意,这只是一个示例代码,需要根据具体情况进行修改。
阅读全文
相关推荐














