大致上最需要注意的就是while迴圈需要用一個stack去記位置就OK了。(雖然說先做預處理也是可以啦....)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #include<vector> 6 #define N 10000 7 8 using namespace std; 9 int main() 10 { 11 char cmd[N]; 12 scanf("%s",cmd); 13 int sl=strlen(cmd); 14 15 int cmdptr=0; 16 17 char mry[N]; memset(mry,0,sizeof(mry)); 18 int mryptr=0; 19 20 vector <int>outerwhile; 21 while(cmdptr<sl) 22 { 23 printf("[%c]",cmd[cmdptr]); 24 switch (cmd[cmdptr]) 25 { 26 case '+': 27 mry[mryptr]++; 28 cmdptr++; 29 break; 30 case '-': 31 mry[mryptr]--; 32 cmdptr++; 33 break; 34 case '>': 35 mryptr++; 36 mryptr%=N; 37 cmdptr++; 38 break; 39 case '<': 40 mryptr=(mryptr+N-1)%N; 41 cmdptr++; 42 break; 43 case '.': 44 putchar(mry[mryptr]); 45 cmdptr++; 46 break; 47 case ',': 48 mry[mryptr]=getchar(); 49 cmdptr++; 50 break; 51 case '[': 52 if(mry[mryptr]) 53 { 54 outerwhile.push_back(cmdptr); 55 cmdptr++; 56 } 57 else 58 { 59 int c=0; 60 while(c>=0)//c||(cmd[cmdptr]!=']')) 61 { 62 cmdptr++; 63 if(cmd[cmdptr]=='[') 64 c++; 65 else if(cmd[cmdptr]==']') 66 c--; 67 } 68 cmdptr++; 69 } 70 break; 71 case ']': 72 cmdptr=outerwhile.at(outerwhile.size()-1); 73 outerwhile.pop_back(); 74 break; 75 } 76 } 77 return 0; 78 }
沒有留言:
張貼留言