2016-04-14 9 views
1

item=infix_exp[i++];次のCコードではどういう意味ですか?行番号21。後置変換のためのものです。私が知る限り、ここではiは配列インデックスです。しかし、なぜそれはループなしで増加していますか?次のCコードでは、 "item = infix_exp [i ++];"とはどういう意味ですか?

これはコード

#include<stdio.h> 
#include<conio.h> 
#define SIZE 100 
int top = -1; 
char stack[SIZE]; 
void push(char item); 
char pop(); 
int is_operator(char symbol); 
int precedence(char symbol); 
void main() 
{ 
    int i; 
    int j; 
    char infix_exp[SIZE], postfix_exp[SIZE]; 
    char item; 
    char x; 
    printf("\nEnter Infix expression in parentheses: \n"); 
    gets(infix_exp); 
    i=0; 
    j=0; 
    item=infix_exp[i++]; /* HERE */ 
    while(item != '\0') 
    { 
     if(item == '(') 
     { 
      push(item); 
     } 
     else if((item >= 'A' && item <= 'Z') || 
       (item >= 'a' && item <= 'z')) 
     { 
      postfix_exp[j++] = item; 
     } 
     else if(is_operator(item) == 1) 
     { 
      x=pop(); 
      while(is_operator(x) == 1 && precedence(x) 
        >= precedence(item)) 
      { 
       postfix_exp[j++] = x; 
       x = pop(); 
      } 
      push(x); 
      push(item); 
     } 
     else if(item == ')') 
     { 
      x = pop(); 
      while(x != '(') 
      { 
       postfix_exp[j++] = x; 
       x = pop(); 
      } 
     } 
     else 
     { 
      printf("\nInvalid Arithmetic Expression.\n"); 
      getch(); 
     } 
     item = infix_exp[i++]; 
    } 
    postfix_exp[j++] = '\0'; 
    printf("\nArithmetic expression in Postfix notation: "); 
    puts(postfix_exp); 
    getch(); 
} 
void push(char item) 
{ 
    if(top >= SIZE-1) 
    { 
     printf("\nStack Overflow. Push not possible.\n"); 
    } 
    else 
    { 
     top = top+1; 
     stack[top] = item; 
    } 
} 
char pop() 
{ 
    char item = NULL; 
    if(top <= -1) 
    { 
     printf("\nStack Underflow. Pop not possible.\n"); 
    } 
    else 
    { 
     item = stack[top]; 
     stack[top] = NULL; 
     top = top-1; 
    } 
    return(item); 
} 
int is_operator(char symbol) 
{ 
    if(symbol == '^' || symbol == '*' || symbol == '/' || 
     symbol == '+' || symbol == '-') 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
} 
int precedence(char symbol) 
{ 
    if(symbol == '^') 
    { 
     return(3); 
    } 
    else if(symbol == '*' || symbol == '/') 
    { 
     return(2); 
    } 
    else if(symbol == '+' || symbol == '-') 
    { 
     return(1); 
    } 
    else 
    { 
     return(0); 
    } 
} 

答えて

2

item=infix_exp[i++];あるがitemにアレイのi番目の要素を取得することを意味し、1

によってiを増加線がコードのために著者であると思われますwhile((item=infix_exp[i++]) != '\0')を使用してitem=infix_exp[i++];を2回書き込むことを推奨します(もう1つは59行目です)。

1

item=infix_exp[i++];は、後者を除い

item=infix_exp[i]; 
i++; 

に相当するsequence pointもう一つを有しています。

1

それはiの値は、この行で、その後0ある場合

item=infix_exp[i]; 
i = i + 1; 
1

あなたが混乱している文が

item=infix_exp[i++]

文のこの行の前にあるだけで同じようですiの値も0ですが、次の行のiの値は1です。 このステートメントはループ内ではありませんが、ループ内ではiの値が使用されます。ループが繰り返されるたびに、iの値が1増加します。またi++loopとは関係ありません。次の行にインクリメントの効果を加えたい場合、そうすることができます。

関連する問題