首页 > 电脑

c语言操作问题

更新时间2018-06-19 07:03:34

#include<stdio.h>

#include<string.h>

 

void jiami(char c[],int a[]){ 

 

    for(int i = 0, j = 0; c[j];j++, i = (i + 1) % 8){

 

        c[j]+=a[i];

 

        if(c[j] > 122) {

c[j] -= 90;}

    }

}

void jiemi(char c[],int a[]){ 

 

    for(int i = 0, j = 0; c[j];j++, i = (i + 1) % 8){

 

        c[j]-=a[i];

 

        if(c[j] < 32) 

{

c[j] += 90;}

    }

}

void xiangdeng(char c[],char b[])

{

c=b;

}

 

int main()

{

 

    int a[] = {5,7,8,6,4,3,9,2};

 

    char s[50],s1[50];

 

    printf("请输入字符串:");

    scanf("%s",&s);

    xiangdeng(s1,s); 

 

    jiami(s,a);

 

    printf("加密后密文:%s",s);

 

    jiemi(s,a);

 

    if(s1==s) 

printf("解密后密文:%s",s); 

 

    else 

printf("解密错误!"); 

 

}

为什么总出现解密错误

没看到你的要求。算法上感觉有问题

122是‘z'的ASCII而90是'A'ASCII码,而A~z中间,对字母来说ASCII是不连续的

所以若是你包含大小写的话,就要考虑这个问题的

另外,你程序有两个基础的错

void xiangdeng(char c[],char b[])

{

c=b;

}

不会改变任何内容(c,b都是实参,在函数中不会改变的)

c语言的字串赋值,只能用strcpy函数

而同样的

if(s1==s) 

这个是两个指针的比较,它们永远不可能相等的。

C的字串比较不能用==,要用函数strcmp的

建议楼主卸载重装

相关标签:c语言

上一篇:为什么把txt文本修改成vbs会变成↓

下一篇:STM32F1中两个字符串数组中间打点事什么意思