要将"china"译成密码;
译码规律是:用原来字母后面的第4个字母代替原来的字母.
例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"china"应译为"glmre"。
#include<stdio.h>
int main()
{
char sec[11]={0};
//gets(sec);
scanf("%s", sec);
//for (int i = 0; sec[i] != '\0'; i++)
int sz = sizeof(sec) / sizeof(sec[0]);
for(int i=0;i<sz-1;i++)
{
if (sec[i]>='A' && sec[i]<='Z')
{
sec[i] = (sec[i] + 4-'A') % 26+'A';
}
if (sec[i] >= 'a' && sec[i]<='z')
{
sec[i] = (sec[i] + 4-'a') % 26 + 'a';
}
}
//puts(sec);
printf("%s", sec);
return 0;
}
- 知识点:
数组,ASCII码
- 解析:
先声明一个数组,并给其初始化char sec[11]={0};
接着输入scanf("%s", sec);
/gets(sec)
接着进入循环,有两种方法:
一种是通过得到字符串的长度,用for(int i=0;i<sz-1;i++)
来限制,要注意多计数了\0,结果要减1;
另一种是通过用数组中的数!='\0'来限制for (int i = 0; sec[i] != '\0'; i++)
,但是要注意字符串中不能有空格;
主体部分:
通过if (sec[i]>='A' && sec[i]<='Z')
if (sec[i] >= 'a' && sec[i]<='z')
将字符窜分到不同的操作中去;
程序精华sec[i] = (sec[i] + 4-'a') % 26 + 'a';
+4是后移操作
-’a'是计算到a的距离
%26是求距离超出26的字符绕一圈回来后,离a的距离:比如 'W' 后移 4 再减 'A' 变成了 26,超出了范围最大的 25,所以对 26 取余,就成了 0,0 就是 'W' 后移 4 之后与 'A' 真正的距离
最后加‘a'得到字符再ASCII码中对应的数
输出 printf("%s", sec)