思路很简单(也很奇葩)
用
a[i]+b;
if(a[i]>='Z'&&a[i]<='a'||a[i]>='z'){
a[i]-=26;时
可能会这样:
a[i]=Z
b=23
加一加
Z的ascll是90
90+23=113
113是q
符合if
输出q
明显不对呀!!
可以再加一个数组c[i],记录a[i]的大小写
把字母全部变为大写
输出时,根据c[i]选择输出大小写
减个a-A【doge】
上代码:
#include <cstdio>
#include <cstring>
bool c[50];//这里可以不用数组
int main(){
char a[51];
int b;
scanf("%d%s",&b,a);
int l=strlen(a);
for(int i=0;i<l;i++){
if(a[i]>='A'&&a[i]<='Z'){//字母是大写
c[i]=0;
}
if(a[i]>='a'&&a[i]<='z'){//字母是小写
c[i]=1;
a[i]-='a'-'A';
}
a[i]+=b;
if(a[i]>'Z'){全是大写,小写不用考虑
a[i]-=26;
}
if(c[i]){\\还原
a[i]+='a'-'A';
}
}
printf("%s",a);
return 0;
}