所以我想为学校项目制作一种加密程序,我希望例如字母“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
答案 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
- 这将允许程序很好地处理流,并且可能的包装脚本可以在事实之后将其转换为就地翻译器(通过临时文件)需要的。