读书人

C语言 新人请问一个有关问题

发布时间: 2013-12-04 17:21:01 作者: rapoo

C语言 新人请教一个问题。
题目是:编写 2 个函数,一个实现字符串加密,一个实现字符串解密,加密的方法为 字符的 ASCII 码加 5,如果超过 Z,则返回到 A 继续,即 W+5 为 B。解密则 反过来运算。输入一个字符串输出加密和解密后的结果。

我的代码是:#include<stdio.h>
char abc(char a[]) //定义字符串加密的函数
{
int i;
for(i=0;a[i]!='\0';i++)
{
a[i]=a[i]+5; //每个字符ASCII码加上5
if(a[i]>90) //当ASCII码超过Z时
a[i]=a[i]-26;
}
printf("加密后的字符串为:\n");
for(i=0;a[i]!=0;i++) //输出加密后的字符串
printf("%c",a[i]);
printf("\n");
}
char cba(char a[]) //定义字符串解密的函数
{
int i;
for(i=0;a[i]!='\0';i++)
{
a[i]=a[i]-10; //每个字符ASCII码减10,即原来的字符减5
if(a[i]<65) //当ASCII码小于A时
a[i]=26+a[i];
}
printf("解密后的字符串为:\n");
for(i=0;a[i]!=0;i++) //输出解密后的字符串
printf("%c",a[i]);
printf("\n");
}

int main()
{
char a[20];
printf("请输入字符串:\n");
gets(a); //输入字符串
abc(a);
cba(a);
}

功能已经实现, 但我弄不懂调用cba函数的时候为什么要a[i]=a[i]-10;而不是-5;
调用abc函数的时候不是不改变原字符串吗?如果是-5的话就变回了原来的字符串。
C语言
[解决办法]

引用:
Quote: 引用:

楼主为什么认为解密是返回-10的操作呢?
假设a的话,加密+5变成了f,然后解密的话-5才能变成a的吧,如果-10,回不去了!


噢,,这点我理解错了。。 但是 假设经过加密函数abc后 a变成了f。 那下面调用解密函数的时候传给形参的值为什么是f而不是原先的a呢? 经过加密函数原字符串应该是不会变的啊?

第一:形参只有类型有用而已,里面放不放变量名都是没有关系的!
第二:因为你传的数组名,数组作为参数的时候和指针是一样的,操作的是地址!当你修改地址上的内容的时候,显然当你再通过地址访问的时候,它的值已经发生变化的的!而且你这样是才是正确的!要不然也达不到加密的作用了!

读书人网 >C语言

热点推荐