这个题的话数字是可以直接判断的,而且加密和解密可以一起做,直接使用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; }