啊~~~~ 2025-01-23 22:49 采纳率: 100%
浏览 13
已结题

c++,c#文字加密错了,不知道怎么改

自己写了一个文字加密的代码提示42行错了,不知道怎么改

#include <bits/stdc++.h>
using namespace std;
  int main(){
    int Len1,Len2;
    char decrypt(char*,int);  //声明解密函数
    char encrypt(char*,int);  //声明加密函数
    char encry[100];             //定义加密数组
    char decry[100];             //定义解密数组
      cout<<"请输入原文:";
    gets(encry);                    //输入加密数组
    Len2= strlen(encry);           //计算输入字符串的长度
    cout<<"密码为:";               //输出密码
    cout<<encrypt(encry,Len2);       //应用加密函数
    cout<<endl;
    cout<<"请输入密码:";            //输入密码
    gets(decry);                   //输入密码
    Len1=strlen(decry);             //计算字符串长度
    cout<< "解密:";
    decrypt(decry,Len1);             //应用解密函数
  }
char encrypt(char*p1,int Len2 )   //定义加密函数
{
    int nums[]= {4,9,6,2,8,7,3};           //初始化要插入的数字的数组
    int j;
    int output;
    for(int i=0; i<Len2; i++)               //循环使每个加密数组的元素加上一个数字
    {
        j=i;
        output=*(p1+i)+nums[j%6];            //加上数组上的元素,注意是j%6而不是7
        if(output>122)                     //如果超出122则从32开始加
        {
            output=output%122+31;          //因为%122最小值为1,所以+31而不是32
        }
        cout<<(char)output;                //因为定义output为int类型所以输出时要强制转换,也可以不强制转换得到数字密码
    }
}
char decrypt(char*p2,int Len1)  //定义解密函数,主体与加密函数一致
{
    int j;
    int nums[]= {4,9,6,2,8,7,3};
    int output;
    for(int i=0; i<Len2; i++){
        j=i;
        output=*(p2+i)-nums[j%6];
        if(output<32){
            output=122-(31%output);    
        }
        cout<<(char)output;
    }

}

复制的时候格式有点问题,不用管

  • 写回答

4条回答 默认 最新

  • a5156520 2025-01-24 12:43
    关注

    将42行的Len2改为Len1,然后将第13行的cout<<去掉即可。

    修改如下:

    #include <bits/stdc++.h>
    using namespace std;
      int main(){
        int Len1,Len2;
        char decrypt(char*,int);  //声明解密函数
        char encrypt(char*,int);  //声明加密函数
        char encry[100];             //定义加密数组
        char decry[100];             //定义解密数组
          cout<<"请输入原文:";
        gets(encry);                    //输入加密数组
        Len2= strlen(encry);           //计算输入字符串的长度
        cout<<"密码为:";               //输出密码
        // 下面这里直接调用加密函数即可 
        encrypt(encry,Len2);       //应用加密函数 
        cout<<endl;
        cout<<"请输入密码:";            //输入密码
        gets(decry);                   //输入密码
        Len1=strlen(decry);             //计算字符串长度
        cout<< "解密:";
        decrypt(decry,Len1);             //应用解密函数
      }
    char encrypt(char*p1,int Len2 )   //定义加密函数
    {
        int nums[]= {4,9,6,2,8,7,3};           //初始化要插入的数字的数组
        int j;
        int output;
        for(int i=0; i<Len2; i++)               //循环使每个加密数组的元素加上一个数字
        {
            j=i;
            output=*(p1+i)+nums[j%6];            //加上数组上的元素,注意是j%6而不是7
            if(output>122)                     //如果超出122则从32开始加
            {
                output=output%122+31;          //因为%122最小值为1,所以+31而不是32
            }
            cout<<(char)output;                //因为定义output为int类型所以输出时要强制转换,也可以不强制转换得到数字密码
            //cout<<"\noutput="<<(int)output<<"i="<<i<<endl<<"e|";
        }
    }
    char decrypt(char*p2,int Len1)  //定义解密函数,主体与加密函数一致
    {
        int j;
        int nums[]= {4,9,6,2,8,7,3};
        int output;
        for(int i=0; i<Len1; i++){  // 这里for循环的循环条件改为i<Len1,因为参数是Len1 
            j=i;
            output=*(p2+i)-nums[j%6];
            if(output<32){
                output=122-(31%output);    
            }
            cout<<(char)output;
        }
     
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月23日