如何用C中的数字替换字母?

时间:2018-05-27 11:08:04

标签: c numbers letter

所以我想为学校项目制作一种加密程序,我希望例如字母“a”被替换为:12345'b',C语言为54321,我该如何实现?我是到目前为止我的代码不是最好的:

eFile = fopen("Message.txt", "ab+");
            while(!feof(eFile))
            {
                fscanf(eFile,"%c",&message);
            }

我希望例如,如果我将单词apple写入文本文件,让程序逐字扫描并用5位数字替换每个字母(我已经预先定义了它们)示例:apple = 12342 69865 69865 31238 43297

2 个答案:

答案 0 :(得分:2)

  • 从输入中逐字符读取
  • 使用简单数组将字符转换为数字或字符串,或使用处理函数
  • 打印该号码
  • 替换并不容易,最简单的方法是创建临时文件,将数字写入该临时文件,而不是将临时文件复制到原始文件并删除临时文件。

_

#include <stdio.h>
#include <assert.h>

int cipher_table[255] = {
    ['a'] = 12342,
    ['p'] = 69865,
    ['l'] = 31238,
    ['e'] = 43297,
    // so on...
};

int main()
{
    FILE *fin = stdin; // fopen(..., "r");
    assert(fin != NULL);
    FILE *fout = stdout; // tmpfile();
    assert(fout != NULL);
    for (int c; (c = getc(fin)) != EOF;) {
        if (c == '\n') {
            if (fputc('\n', fout) == EOF) {
                fprintf(stderr, "Error writing to file fout with fputc\n");
                return -1;
            }
            continue;
        }
        if (fprintf(fout, "%5d ", cipher_table[c]) < 0) {
            fprintf(stderr, "Error writing to file fout with fprintf\n");
            return -1;
        }
    }
    close(fin);
    close(fout);
    return 0;
}

答案 1 :(得分:1)

我不确定您的策略是否可以称为加密,但可以轻松完成 用查找表。

只需将替换放在int表中,如下所示:

int map[]={ //size will be autoinferred to fit the indices
    ['a']=12342,
    ['p']=69865,
    ['l']=31238,
    ['e']=43297, 
    //you should preferrably have an entry for each value of char
};

并用它来打印替换品。

int c;
while(EOF!=(c=fgetc(inputFile)))
    if(0>(outPutfile,"%d \n", map[c]))
        return -1;

由于新文件的大小会发生不可预测的变化,因此可能会发生变化 最好输出到临时文件,然后将其移动到 在原版成功完成之后的地方。

更好的想法可能是忘记就地文件重写 并简单地阅读stdin并写入stdout - 这将允许程序很好地处理流,并且可能的包装脚本可以在事实之后将其转换为就地翻译器(通过临时文件)需要的。