poj 2041 Unreliable Message 字符串处理
水的问题。直接附着到代码。
//poj 2041 //sep9 #include <iostream> using namespace std; char mode[128]; char ori[128],res[128]; int len; void J() { ori[0]=res[len-1]; for(int i=1;i<len;++i) ori[i]=res[i-1]; } void C() { ori[len-1]=res[0]; for(int i=0;i<len-1;++i) ori[i]=res[i+1]; } void E() { int i; for(i=0;i<len/2;++i) ori[i]=res[i+(len+1)/2]; if(len%2==1) ori[len/2]=res[len/2]; for(i=(len+1)/2;i<len;++i) ori[i]=res[i-(len+1)/2]; } void A() { for(int i=0;i<len;++i) ori[i]=res[len-1-i]; } void P() { for(int i=0;i<len;++i) if(res[i]<='9'&&res[i]>='0') ori[i]=res[i]=='0'?'9':res[i]-1; else ori[i]=res[i]; } void M() { for(int i=0;i<len;++i) if(res[i]<='9'&&res[i]>='0') ori[i]=res[i]=='9'?'0':res[i]+1; else ori[i]=res[i]; } int main() { int i,n; scanf("%d",&n); while(n--){ scanf("%s%s",mode,res); len=strlen(res); ori[len]='\0'; for(i=strlen(mode)-1;i>=0;--i){ if(mode[i]=='J') J(); else if(mode[i]=='C') C(); else if(mode[i]=='E') E(); else if(mode[i]=='A') A(); else if(mode[i]=='P') P(); else if(mode[i]=='M') M(); strcpy(res,ori); } printf("%s\n",res); } return 0; }