这个题的话数字是可以直接判断的,而且加密和解密可以一起做,直接使用flag这个标记就可以了,加密flag=1,解密flag=0,在这里的话可以找到数字的规律,如果相加之后还是数字的不用管,如果不是数字的情况其实也很好解决,这里的话(0-1+10)%10=9 (9+1+10)%10=0 (3+1+10)%10=4 给数字加密或者解密之后直接求余10,就可以不用再去判断0和9这两个数字的特殊性,
在字母的时候,先给数字+flag,然后判断,如果不在这个数字范围内,那么他就修改到数字范围内,如果在的话可以不用管,所以可以简化整个代码
完整的代码如下:

#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
char str[1005];
int flag=1;
int main(){
    flag=1;
    while(cin.getline(str,1005)){
        for(int i=0;i<strlen(str);i++){
            if(str[i]>='0'&&str[i]<='9'){
                int tmp=((str[i]-'0')+10+flag)%10;
                str[i]=tmp+'0';
            }else if(str[i]>='A'&&str[i]<='Z'){
                str[i]=str[i]+flag;
                if(str[i]=='A'-1) str[i]='Z';
                else if(str[i]=='Z'+1) str[i]='A';
                str[i]=str[i]+32; 
            }else if(str[i]>='a'&&str[i]<='z'){
                str[i]=str[i]+flag;
                if(str[i]=='a'-1) str[i]='z';
                else if(str[i]=='z'+1) str[i]='a';
                str[i]=str[i]-32; 
            }
        }
        cout<<str<<endl;
        flag=flag*-1; 
    }
    return 0;
}