如何改成文件的呢?
【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:f e a t h r z y x w v u s q p o n m l k j i g d c b
加密字母的对应关系如下:
a b c d e f g h i j k l m n o p q r s t u v w x y z
f e a t h r z y x w v u s q p o n m l k j i g d c b
其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。
【输入形式】从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。
【输出形式】加密后结果输出到文件output.txt中。
【样例输入】
feather
和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:
c language is wonderful.
【样例输出】加密后output.txt文件中内容为:
a ufqzjfzh xl gpqthmrju.
#include <stdio.h>
#include <string.h>
int main ()
{
char ch, words[50], secret_key[50], str[100];
char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};
int i, j, k, len;
i = 0;
ch = getchar();
while (ch != '\n')
{
words[i] = ch;
ch =getchar();
i ++;
}
words[i] = '\0';
i = 0;
ch = getchar();
while (ch != '\n')
{
str[i] = ch;
ch =getchar();
i ++;
}
str[i] = '\0';
gets(words);
gets(str);
len = strlen(words);
for (i = 0; i < len; i ++)//去掉密钥单词中的重复字母
{
for (j = i + 1; j < len; j ++)
{
if (words[i] == words[j])
{
for (k = j ; k < len; k ++)
{
words[k] = words[k + 1];
len --;
}
}
}
}
//得到密钥串
for (i = len - 1, j = 0; i >= 0; i --, j ++)
{
secret_key[j] = words[i];
}
i = len;
j = 25;
while (i < 26 && j >= 0)
{
for (k = 0; k < len; k ++)//看字母在密钥串中已存在
{
if (secret_key[k] == alphabet[j])//若存在,则不保存,跳过该字母
{
j --;
break;
}
}
if (k == len)//若不存在,则保存该字母
{
secret_key[i] = alphabet[j];
i ++;
j --;
}
}
//加密部分
for (i = 0; str[i] != '\0'; i ++)
{
if (str[i] >= 'a' && str[i] <= 'z')
{
len = str[i] - 'a';
putchar(secret_key[len]);
}
else
putchar(str[i]);
}
putchar('\n');
return 0;
}