利用一维字符数组实现一段英文的加密,如“I love you so much. Would you marry me?”。加密原则为:将英文字符向后循环滚动8位,如‘a’转变为‘i’、‘q’转变为‘y’,‘Z’转变为‘H’,空格和标点符号等字符保持不变。打印输出加密后的密文。
与'A'进行差值计算,然后加上8后求余26
#include <stdio.h>
int main()
{
char s[1000];
gets(s);
while(s[i] != '\0')
{
if(s[i] >= 'a' && s[i] <='z')
s[i] = (s[i] - 'a' + 8)%26 + 'a';
else if(s[i] >= 'A' && s[i] <='Z')
s[i] = (s[i] - 'A' + 8)%26 + 'A';
i++;
}
puts(s);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:答案:
首先需要输入一段英文,将其存放在一维字符数组中:
char[] originalText = "This is a test sentence.".toCharArray();
然后我们需要遍历这个字符数组,对每一个英文字符进行加密:
for (int i = 0; i < originalText.length; i++) {
char c = originalText[i];
if (c >= 'A' && c <= 'Z') {
// 大写字母加密
c = (char) ((c - 'A' + 8) % 26 + 'A');
} else if (c >= 'a' && c <= 'z') {
// 小写字母加密
c = (char) ((c - 'a' + 8) % 26 + 'a');
}
// 输出加密后的字符
System.out.print(c);
}
在遍历字符数组时,我们首先判断该字符是否为大写或小写字母,若是,则进行加密操作,其具体方法为:将该字符与字符'A'或'a'相减,再加上8,最后对26取余,再加上字符'A'或'a'即可。最后,我们将加密后的字符输出即可。
完整代码如下:
public class Encryptor {
public static void main(String[] args) {
char[] originalText = "This is a test sentence.".toCharArray();
for (int i = 0; i < originalText.length; i++) {
char c = originalText[i];
if (c >= 'A' && c <= 'Z') {
// 大写字母加密
c = (char) ((c - 'A' + 8) % 26 + 'A');
} else if (c >= 'a' && c <= 'z') {
// 小写字母加密
c = (char) ((c - 'a' + 8) % 26 + 'a');
}
// 输出加密后的字符
System.out.print(c);
}
}
}
输出结果为:
Bpqa qa i bmab aitiaib.