c++字符串问题,求解!

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
    char a[90]={0};
    cin.getline(a,90);
    for(int i=0;a[i];i++){
        if(a[i]>='A'&&a[i]<='Y'){
            a[i]+=1;
        }
        if(a[i]=='Z'){
            a[i]='A';
        }
        if(a[i]>='a'&&a[i]<='y'){
            a[i]+=1;
        }
        if(a[i]=='z'){
            a[i]='a';
        }
    } 
    cout<<a;
    
    
    return 0;
}

运行结果及报错内容

为什么Y会变成A,y会变成a

我的解答思路和尝试过的方法
我想要达到的结果

你需要先判断字符 'Z' 喔,因为如果先判断 'Y',它会被改成'Z','Z'进而被改成了'A',小写同理。
改法:

  • 将后面三个if都改成else if
  • 将z的判断写在最前面

因为循环里面,对每个A至Y、a至y字符的ASCII值+1,因此如果原来字符是Y或y,就变成了Z或z,然后两个if判断把字符Z和z改为A和a,所以最终结果就是Y变成A,y变成a,Z变成A,z变成a,其他字母后移一位。