一、分析
1、将字符与ascii码联系起来
- (a,z)=(97,122)
- (A,Z)=(65,90)
- 括号表示连续区间
2、寻找数学关系
- 若c1属于[a, z],c2 = 'a' + 122 - c1; // 122为Z的ascii码
122即z的ascii码,z-c1表示当前字母与z的间隔,画出数轴更加直观一些,如下图所示:
a和z关于中轴对称,c1的对称点c1'即为所求点,因此在a、z、c1已知的情况下,可求得c1'的值为a+(z-c1)
- 若c1属于[A, Z],c2 = 'A' + 90 - c1; // 90为Z的ascii码
和上面同理,只是把起始位置a换成了A,z换成了Z的ascii码。
二、代码
void Secret(char *string) {
while (*string != '\0') {
if (*string >= 'a' && *string <= 'z') {
*string = 'a' + 122 - *string;
} else if (*string >= 'A' && *string <= 'Z') {
*string = 'A' + 90 - *string;
}
printf("%c", *string);
string++;
}
}
int main(){
char string[20] = "abcdABCD";
Secret(string);
}