2016-04-14 20 views
1

Was bedeutet es im folgenden C-Code von item=infix_exp[i++];? Zeile Nr. 21. Es ist für Infix zur Postfix-Konvertierung. So weit ich weiß, ist hier i Array-Index. Aber warum steigt es ohne Schleife?Was bedeutet "item = infix_exp [i ++];" im folgenden C-Code?

Dies ist der Code

#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); 
    } 
} 

Antwort

2

item=infix_exp[i++]; bedeutet i te Element des Arrays zu item zu holen, erhöht dann i von 1.

Es die Linie dort des Codes, da der Autor scheint bevorzugt, item=infix_exp[i++]; zweimal zu schreiben (das andere ist in Zeile 59), um while((item=infix_exp[i++]) != '\0') zu verwenden.

1

item=infix_exp[i++]; entspricht

item=infix_exp[i]; 
i++; 

außer dass letztere mehr sequence point hat.

ist

item=infix_exp[i++]

Vor dieser Linie der Erklärung

1

Es ist genau die gleiche wie

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

Die Aussage, wo Sie verwechselt werden immer, wenn der Wert von i0 ist dann in dieser Zeile Der Wert von i ist auch 0, aber der Wert i in der nächsten Zeile ist 1. Diese Anweisung ist nicht in der Schleife, aber der Wert i wird in einer Schleife verwendet. Jedes Mal, wenn die Schleife wiederholt wird, wird der Wert i um eins erhöht. Außerdem hat i++ keine Beziehung mit loop. Wenn Sie den Effekt der Erhöhung in der nächsten Zeile vornehmen möchten, können Sie dies tun.