12.编写一个程序,输入一个字符串,将其中所以的大写英文字母+3,小写字母-3。然后再输出加密后的

2024-11-12 12:47:41
推荐回答(2个)
回答(1):

#include 

char *Change(char s[]) {
int i;
for(i = 0; s[i]; ++i) {
if(s[i] >= 'a' && s[i] <= 'z')
s[i] = (26 + (s[i] - 'a' - 3))%26 + 'a';
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = (26 + (s[i] - 'A' + 3))%26 + 'A';
}
return s;
}

char *Change2(char s[]) {
int i;
for(i = 0; s[i]; ++i) {
if(s[i] >= 'a' && s[i] <= 'z')
s[i] = (26 + (s[i] - 'a' + 3))%26 + 'a';
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = (26 + (s[i] - 'A' - 3))%26 + 'A';
}
return s;
}

int main() {
char a[] = "dsereaiklfiwieik",b[] = "slASSFGGHHJHKKIUUYUYYHHNJKK";
printf("转换前: %s\n",a);
printf("转换后: %s\n",Change(a));
printf("恢复后: %s\n\n",Change2(a));
printf("转换前: %s\n",b);
printf("转换后: %s\n",Change(b));
printf("恢复后: %s\n",Change2(b));
return 0;
}

回答(2):

还像12那样写,把判断分支改为:
if(a[i]-3>='A' && a[i]-3<='Z')
a[i]-=3;
else if(a[i]+3>='a' && a[i]+3<='z')
a[i]+=3;
即可。