You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中实现将字母替换为预定义5位数字的加密程序?

实现字母转预定义5位数字的C语言加密程序

嘿,我来帮你搞定这个学校项目的加密程序!你的需求其实很清晰——把文本里的每个字母替换成预设的5位数字,核心就是字符映射+文件逐字符处理,我一步步给你拆解:

1. 先搞定核心:字母-数字映射表

因为我们要处理a-z(如果需要兼容大写也可以扩展),可以用一个字符串数组来存每个字母对应的5位数字,索引直接对应字母的ASCII偏移量。比如:

// 索引0对应'a',1对应'b',以此类推,按你的需求填数字
char *char_to_num[] = {
    "12345",  // a
    "54321",  // b
    // ... 这里把c到o的数字补上
    "69865",  // p
    // ... 补上q到k的数字
    "31238",  // l
    // ... 补上m到n的数字
    "43297"   // e
};

这样,当你拿到一个小写字母c时,直接用char_to_num[c - 'a']就能拿到对应的5位数字串,非常方便。

2. 修正你的文件读取逻辑

你现在用while(!feof(eFile))是个常见误区——feof()是在读取失败后才会返回真,所以会导致最后多读一次无效字符。正确的写法应该是在循环条件里直接判断读取是否成功:

FILE *eFile = fopen("Message.txt", "r");  // 只读模式就够了,不用ab+
if (!eFile) {  // 一定要判断文件是否打开成功
    printf("无法打开文件!\n");
    return 1;
}

char message;
// 用fgetc逐字符读取,直到文件结束
while ((message = fgetc(eFile)) != EOF) {
    // 这里处理每个字符
}
fclose(eFile);

3. 完整的加密逻辑实现

接下来把映射和读取结合起来,还可以把加密后的内容写入新文件,比如Encrypted.txt:

#include <stdio.h>
#include <ctype.h>  // 用于tolower()处理大写字母

int main() {
    // 定义字母到5位数字的映射表,按你的需求补充完整所有26个字母
    char *char_to_num[] = {
        "12345",  // a
        "54321",  // b
        "11111",  // c
        "22222",  // d
        "43297",  // e
        "33333",  // f
        "44444",  // g
        "55555",  // h
        "66666",  // i
        "77777",  // j
        "31238",  // l
        "88888",  // m
        "99999",  // n
        "69865",  // p
        // 请补充q-r、s-t、u-v、w-x、y-z对应的数字
    };

    // 打开原始文件和加密文件
    FILE *input_file = fopen("Message.txt", "r");
    FILE *output_file = fopen("Encrypted.txt", "w");
    if (!input_file || !output_file) {
        printf("文件打开失败!\n");
        return 1;
    }

    char c;
    while ((c = fgetc(input_file)) != EOF) {
        // 先把大写字母转成小写,兼容大小写输入
        char lower_c = tolower(c);
        // 判断是否是小写字母
        if (lower_c >= 'a' && lower_c <= 'z') {
            // 找到对应的数字串,写入输出文件,后面加空格
            fprintf(output_file, "%s ", char_to_num[lower_c - 'a']);
        } else {
            // 非字母字符可以选择直接输出,或者忽略,这里直接输出原字符
            fprintf(output_file, "%c", c);
        }
    }

    // 别忘了关闭文件,避免资源泄漏
    fclose(input_file);
    fclose(output_file);
    printf("加密完成!结果已保存到Encrypted.txt\n");
    return 0;
}

4. 关键细节说明

  • 大小写兼容:用tolower()把大写字母转成小写,这样不管输入是Apple还是APPLE,都能正确映射。
  • 文件操作安全:每次打开文件都要判断是否成功,避免程序崩溃。
  • 非字母处理:如果遇到空格、标点等非字母字符,代码里直接输出原字符,你可以根据需求修改(比如忽略或者替换成其他标记)。
  • 映射表补充:记得把char_to_num数组里的26个字母对应的数字都补全,不然处理到未定义的字母会出问题。

当你在Message.txt里写入apple后,运行程序,Encrypted.txt里就会出现你想要的12345 69865 69865 31238 43297 (最后有个小空格,要是在意的话,可以加个判断处理最后一个字符的空格,学校项目里这个小细节通常不影响)。

内容的提问来源于stack exchange,提问作者Sepsi Zoltán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:07:54