0
点赞
收藏
分享

微信扫一扫

P1914 小书童——凯撒密码,学会字符串的拆分

全栈学习笔记 04-09 10:00 阅读 1

小书童——凯撒密码 - 洛谷

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String num=sc.next();
        
        for(int i=0;i<num.length();i++) {
        	
        	char nu=num.charAt(i);
        	nu=(char)((nu-'a'+n)%26+'a');
        	System.out.print(nu);
        }
    }    
}

下面是另一种代码,

import java.util.Scanner;  
  
public class Main {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
          
        // 读取移动位数  
        int n = scanner.nextInt();  
          
        // 读取原文字符串  
        String original = scanner.next();  
          
        // 初始化密码字符串  
        StringBuilder password = new StringBuilder();  
          
        // 遍历原文字符串中的每个字符  
        for (int i = 0; i < original.length(); i++) {  
            char ch = original.charAt(i);  
              
            // 根据移动位数计算新字符  
            char newChar = (char) ((ch - 'a' + n) % 26 + 'a';  
              
            // 将新字符添加到密码字符串中  
            password.append(newChar);  
        }  
          
        // 输出密码  
        System.out.println(password.toString());  
          
        // 关闭Scanner  
        scanner.close();  
    }  
}

分别解释 StringBuilderoriginal.charAt(i) 和 (char) ((ch - 'a' + n) % 26 + 'a') 这三个表达式。

  1. StringBuilder

StringBuilder 是 Java 中的一个类,用于构建可变字符序列。它是 String 的一个可变版本,非常适合在需要频繁修改字符串的场景中使用。使用 StringBuilder 可以避免在每次修改字符串时都创建新的 String 对象,从而提高性能。

一些常用的 StringBuilder 方法包括:

  • append(): 追加内容到 StringBuilder
  • insert(): 在指定位置插入内容。
  • delete(): 删除指定位置的字符。
  • replace(): 替换指定位置的字符。
  • toString(): 将 StringBuilder 转换为 String

例如:

 

java复制代码

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");
System.out.println(sb.toString()); // 输出 "Hello World!"
  1. original.charAt(i)

这是一个从字符串 original 中获取指定位置 i 的字符的方法。charAt() 方法接受一个索引 i(从 0 开始),并返回该索引处的字符。

例如:

 

java复制代码

String original = "abcdef";
char ch = original.charAt(2); // ch 的值为 'c'
  1. (char) ((ch - 'a' + n) % 26 + 'a')

这是一个计算新字符的表达式,通常用于实现 Caesar cipher(凯撒密码)或其他类似的字符替换算法。这里的 ch 是一个字符,n 是一个整数,表示移动的位数。

  • ch - 'a': 将字符 ch 转换为从 0 开始的数字。例如,如果 ch 是 'a',则结果为 0;如果 ch 是 'b',则结果为 1,以此类推。
  • ch - 'a' + n: 将 ch 对应的数字加上 n,表示将字符向前移动 n 位。
  • (ch - 'a' + n) % 26: 使用模运算确保结果始终在 0 到 25 之间,从而确保字符不会超出小写字母的范围。
  • (ch - 'a' + n) % 26 + 'a': 将数字转换回字符。如果结果为 0,则得到 'a';如果结果为 1,则得到 'b',以此类推。

例如,如果 ch 是 'a' 且 n 是 3,那么这个表达式将返回 'd'。

希望这可以帮助你理解这三个表达式!如果你有任何其他问题或需要进一步的解释,请告诉我。

举报

相关推荐

0 条评论