标题:如何改成文件的呢?
只看楼主
第五先生
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2020-5-7
结帖率:40%
 问题点数:0 回复次数:5 
如何改成文件的呢?
【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过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;
}
搜索更多相关主题的帖子: 文件 加密 txt str 字母 
2020-06-02 19:13
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

#define MAX_LENGTH  1000

int main(int argc, const char * argv[]) {
    FILE *readFile = NULL;
    FILE *writeFile = NULL;
    readFile = fopen("/Users/aaa/Desktop/demo.txt", "r");
    writeFile = fopen("/Users/aaa/Desktop/demo1.txt", "wa");
    char text[MAX_LENGTH] = {};
    
    do {
        memset(text, 0, sizeof(char) * MAX_LENGTH);
        fgets(text, MAX_LENGTH, readFile);
        printf("%s", text);
        // 在这里把text改为加密之后的数据
        fputs(text, writeFile);
    } while (strlen(text) > 0);
    
    fclose(readFile);
    fclose(writeFile);
    return 0;
}
2020-06-02 23:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    char key[51];
    scanf( "%s", key );

    char keymap[26];
    {
        _Bool bmp[26] = { 0 };
        char* q = keymap;
        for( const char* p=key; *p; ++p )
        {
            if( !bmp[*p-'a'] )
            {
                bmp[*p-'a'] = 1;
                *q++ = *p;
            }
        }
        for( int ch=25; ch>=0; --ch )
        {
            if( !bmp[ch] )
            {
                bmp[ch] = 1;
                *q++ = 'a'+ch;
            }
        }
    }

    FILE* fin = fopen("encrypt.txt", "r");
    FILE* fout = fopen("output.txt", "w");
    for( int ch; ch=fgetc(fin),ch!=EOF; )
    {
        if( ch>='a' && ch<='z' )
            fputc( keymap[ch-'a'], fout );
        else
            fputc( ch, fout );
    }
    fclose( fout );
    fclose( fin );
}
2020-06-03 09:26
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
bmp[ch] = 1; 好像可以不写

梦想拥有一台龙芯3A-4000
2020-06-03 16:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用ditg在2020-6-3 16:58:15的发言:

bmp[ch] = 1; 好像可以不写

谢谢,确实是这样
2020-06-03 19:02
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
r版

梦想拥有一台龙芯3A-4000
2020-06-03 21:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501932-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.128263 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved