2-1 改错题

2-1 改错题

对一个字符串中每个字符(其编码用ch表示)作如下加密操作:
(1) 如果ch是小写字母,就用(ch+5)的值的八进制数字字符串替换该字母;
(2)如果ch是大写字母,就用(ch-5)的值的十六进制数字字符串替换该字母;
(3)如果ch是非字母字符则保持愿样。
函数en的功能是将形参c中字符的编码转换成n进制数字字符串并保存到s指向的数组中。函数encrypt的功能是将a指向的字符串按以上要求做加密处理后保存到b指向的数组中。
(题目保证所有字符串长度不超过1000)
【含有错误的源程序】
#include<string.h>
#include<stdio.h>
void en(char c,int n,char s)
{ int t,i=0;
char temp;
while(c!=0)
{ t=c%n;
if(t<10)
s[i++]=t+'0';
else
s[i++]=t-10+'A';
c=c/10;
}
s[i]='\0';
for(t=i-1,i=0;i<t;i++,t--)
temp=s[i],s[i]=s[t],s[t]=temp;
}
void encrypt(char a[],char b[])
{ char s[4];
int i;
for(i=0;a[i]!='\0';i++)
{ if(a[i]>='a' && a[i]<='z')
en(a[i]+5,8,s);
else if(a[i]>='A' && a[i]<='Z')
en(a[i]-5,16,s);
else s[0]=a[i],s[1]='\0';
strcpy(b,s);
}
}
void main()
{ static char a[30]="No.1",b[100];
encrypt(char a[30],char b[30]);
puts(b);
}

测试样例:
输入

No.1

输出

49164.1