C语言 新人请问一个有关问题
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的话就变回了原来的字符串。
------解决方案--------------------
第一:形参只有类型有用而已,里面放不放变量名都是没有关系的!
第二:因为你传的数组名,数组作为参数的时候和指针是一样的,操作的是地址!当你修改地址上的内容的时候,显然当你再通过地址访问的时候,它的值已经发生变化的的!而且你这样是才是正确的!要不然也达不到加密的作用了!
题目是:编写 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语言
------解决方案--------------------
第一:形参只有类型有用而已,里面放不放变量名都是没有关系的!
第二:因为你传的数组名,数组作为参数的时候和指针是一样的,操作的是地址!当你修改地址上的内容的时候,显然当你再通过地址访问的时候,它的值已经发生变化的的!而且你这样是才是正确的!要不然也达不到加密的作用了!