关于字符串加密程序中的一些问题

如题,见程序中的注释


#include<stdlib.h>   /*要加这一行才能用malloc*/
#include<stdio.h>
#include<string.h>


int find_char(char *new_char,char a)
{
    int i=0;
    while(new_char[i]!='\0')
    {
        if(new_char[i]==a)
            return 1;
        i++;
    }
    return 0;
}



void encrypt_code(char *key,char *data)
{
    int number=0,i=0,j=0,len=0,len_1=0;
    char new_char[26];
    char secret[26];
    char *encrypt=NULL;
    len_1=strlen(data);
    encrypt=(char *)malloc(len_1*sizeof(char));  //这里要有cha*的强制转换
    memset(new_char,'\0', 26 * sizeof(char)) ; /*这里可以记一下,初始化为0的方法*/
    while(key[i]!='\0')
    {
        if(!(find_char(new_char,key[i])))
        {
            new_char[number]=key[i];
            number++;
        }
        i++;
    }
    len=strlen(new_char);
    for(i=0;i<len;i++)
    {
        if(new_char[i]<='z' && new_char[i]>='a')
            new_char[i]-=32;
    }
    for(i=0;i<26;i++)
    {
        if(i<len)
        {
                secret[i]=new_char[i];
        }
        else
        {
            while(j<26)
            {
                if(!(find_char(new_char,'A'+j)))
                {
                    secret[i]='A'+j;
                    j++;
                    break;
                }
                else
                {
                    j++;
                }
            }

        }
    }
    for(i=0;i<len_1;i++)
    {
        if(data[i]==' ')
        {
            encrypt[i]=data[i];
        }
        else
        {
            if(data[i]<='z' && data[i]>='a')
            {
                encrypt[i]=secret[data[i]-'a'];
                encrypt[i]+=32;
            }
            else
                encrypt[i]=secret[data[i]-'A'];
        }
    }
    for(i=0;i<len_1;i++)
    {
        printf("%c",encrypt[i]);
    }


}


int main()
{
    char key[26];
    char data[1000];
    gets(key);  /*输入不带空格的字符串方法*/
    gets(data);
    encrypt_code(key,data);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值