C语言实现字母循环左移加密并逆序存储

本文提供一段使用C语言编写的程序,可以在CodeBlocks环境中运行,实现对明文字符串的加密操作。加密过程包括两个步骤:

  1. 字母循环左移: 明文字符串中所有的字母都按字母表顺序被循环左移了三个位置('deac' -> 'abxz'),其他非字母的字符不变。
  2. 逆序存储: 加密后的字符串进行逆序存储('abxz' -> 'zxba')。

程序代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAX_LENGTH 80

int main() {
    char plaintext[MAX_LENGTH];
    char ciphertext[MAX_LENGTH];
    int length;

    printf('请输入明文字符串(含空格):\n');
    fgets(plaintext, sizeof(plaintext), stdin);

    length = strlen(plaintext);

    // 加密操作:按字母表顺序循环左移三个位置
    for (int i = 0; i < length; i++) {
        if (isalpha(plaintext[i])) {
            if (islower(plaintext[i])) {
                ciphertext[i] = 'a' + (plaintext[i] - 'a' + 3) % 26;
            } else {
                ciphertext[i] = 'A' + (plaintext[i] - 'A' + 3) % 26;
            }
        } else {
            ciphertext[i] = plaintext[i];
        }
    }

    // 逆序存储
    for (int i = 0; i < length / 2; i++) {
        char temp = ciphertext[i];
        ciphertext[i] = ciphertext[length - 1 - i];
        ciphertext[length - 1 - i] = temp;
    }

    printf('加密后的密文字符串为:\n%s\n', ciphertext);

    return 0;
}

程序说明:

  1. 定义变量: 程序首先定义了两个字符数组,plaintext用于存储输入的明文字符串,ciphertext用于存储加密后的密文字符串,并定义了length变量存储字符串的长度。
  2. 获取输入: 程序通过fgets函数获取输入的明文字符串,并计算其长度。
  3. 加密操作: 循环遍历明文字符串的每个字符,判断是否为字母。如果是字母,根据其大小写进行循环左移三个位置的加密操作;如果不是字母,则直接复制到密文字符串中。
  4. 逆序存储: 使用双指针法,将密文字符串的左右两端字符交换,实现逆序存储。
  5. 输出密文: 最后,程序输出加密后的密文字符串。

使用方法:

  1. 将代码保存为.c文件(例如:encryption.c)。
  2. 在CodeBlocks中打开该文件,并编译运行。
  3. 在程序提示输入明文字符串后,输入您的明文,程序将输出加密后的密文字符串。

示例:

输入:

Hello! Ace 30

输出:

03 bzX !liibE

代码解析:

  • isalpha(plaintext[i]):判断字符是否为字母。
  • islower(plaintext[i]):判断字符是否为小写字母。
  • (plaintext[i] - 'a' + 3) % 26:对小写字母进行循环左移三个位置的加密操作。
  • (plaintext[i] - 'A' + 3) % 26:对大写字母进行循环左移三个位置的加密操作。
  • ciphertext[i] = ciphertext[length - 1 - i]:交换密文字符串的左右两端字符。

通过这段C语言代码,您可以轻松实现对明文字符串的加密操作,并理解其背后的原理。您可以根据需要修改代码中的参数,例如循环左移的位数,来实现不同的加密效果。

C语言实现字母循环左移加密并逆序存储

原文地址: https://www.cveoy.top/t/topic/JQQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录