题目
编写程序,演示字符与 ASCII 整数码之间的双向转换:实现简易凯撒密码加密器(Caesar Cipher),将输入的英文字符串中的每个字母后移 3 位(超出字母范围循环回绕),随后逆向解密还原。
输入格式:无需外部输入。
输出格式:展示明文、加密后密文与解密还原后的明文。
数据范围与约定:ASCII 与字符算术。
思路与算法
1. double 与 char 转换
对字符数组调用 double('A') 得到 ASCII 整数码 65;反之 char(65) 转换回字符 'A'。
2. 向量化字符算术
对字符串执行 str + 3 会将字符转为 double 整数并加 3,再传给 char() 即可直接生成加密后的字符数组。
3. 大小写回绕
针对小写字母使用模运算回绕:char(mod(double(c) - 97 + shift, 26) + 97)。
完整程序
% Octave / MATLAB 第78题:ASCII 凯撒密码加解密
plain_text = "attackatdawn";
shift = 3;
% 加密过程 (全向量化)
raw_ascii = double(plain_text);
% 映射到 0~25 空间做模 26 移位,再加回 97 ('a')
enc_ascii = mod(raw_ascii - double("a") + shift, 26) + double("a");
cipher_text = char(enc_ascii);
% 解密过程
dec_ascii = mod(double(cipher_text) - double("a") - shift, 26) + double("a");
decrypted_text = char(dec_ascii);
fprintf("原始明文: %s\n", plain_text);
fprintf("偏移位数: %d\n", shift);
fprintf("加密密文: %s\n", cipher_text);
fprintf("解密还原: %s\n", decrypted_text);运行示例
输出:
原始明文: attackatdawn
偏移位数: 3
加密密文: dwwdfndwgdzq
解密还原: attackatdawn