2016-04-14 3 views
1

Что означает item=infix_exp[i++]; в следующем C-коде? Строка № 21. Это для infix для постфиксного преобразования. Насколько мне известно, здесь i - это индекс массива. Но почему он увеличивается без какого-либо цикла?Что означает «item = infix_exp [i ++];» в следующем C-коде?

Это код

#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++]; означает принести i-й элемент массива item, то приращение i на 1.

Кажется, линия там, потому что автор кода предпочитает писать item=infix_exp[i++]; дважды (другой в строке 59) с использованием while((item=infix_exp[i++]) != '\0').

1

item=infix_exp[i++]; эквивалентно

item=infix_exp[i]; 
i++; 

за исключением того, что последний имеет еще один sequence point.

1

заявление, где вы путаться является

item=infix_exp[i++]

До этой строки заявления, если значение i является 0, то в этой строке значение i также равно 0, но значение i в следующей строке равно 1. Этот оператор не находится в цикле, но значение i используется в цикле. Каждый раз, когда цикл повторяется, значение i увеличивается на единицу. Кроме того, i++ не имеет отношения к loop. Если вы хотите сделать эффект приращения в самой следующей строке, вы можете сделать это.