2017-03-28 11 views
0

C言語の®はどういう意味ですか?このコードでは、®のために印刷部分のプログラムで[エラー]が '\ 256'で迷います。そしてı は、C++コードを翻訳したいです。つまり、IMは「ノード*」に「*空」から[-fpermissive]C++の®(¥256)文字

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <ctype.h> 

    #define MAX 10 
    #define EMPTY -1 

    struct node 
    { 
     char kind; 
     char op; 
     int number; 
     struct node *left,*right; 
    }; 

    struct stack 
    { 
     struct node *data[MAX]; 
     int top; 
    }; 

    int isempty(struct stack *s) 
    { 
     return (s->top == EMPTY) ? 1 : 0; 
    } 

    void emptystack(struct stack* s) 
    { 
     s->top=EMPTY; 
    } 

    void push(struct stack* s, struct node *item) 
    { 
     if(s->top == (MAX-1)) 
     { 
      printf("\nSTACK FULL"); 
     } 
     else 
     { 
      ++s->top; 
      s->data[s->top]=item; 

     } 
    } 

    struct node* pop(struct stack* s) 
    { 
     struct node *ret=NULL; 
     if(!isempty(s)) 
     { 
      ret= s->data[s->top]; 
      --s->top; 
     } 
     return ret; 
    } 

    void postfix2exptree(char* postfix, struct node **root) 
    { 
     struct stack X; 
     struct node *newnode,*op1,*op2; 
     char numberextract[5]; 
     char *p; 

     emptystack(&X); 
     p = &postfix[0]; 
     strcpy(numberextract,""); 
     while(*p) 
     { 

      while(*p == ' ' || *p == '\t') 
      { 
       p++; 
      } 

      if(isdigit(*p)) 
      { 
       while(isdigit(*p)) 
       { 
        strcat(numberextract,p); 
        p++; 
       } 

       newnode = malloc(sizeof(struct node)); 
       newnode->kind = 'N'; 
       newnode->number = atoi(numberextract); 
       newnode->left = NULL; 
       newnode->right = NULL; 
       push(&X,newnode); 
       strcpy(numberextract,""); 
      } 
      else 
      { 
       op1 = pop(&X); 
       op2 = pop(&X); 
       newnode = malloc(sizeof(struct node)); 
       newnode->kind = 'O'; 
       newnode->op = *p; 
       newnode->left = op2; 
       newnode->right = op1; 
       push(&X,newnode); 
      } 
      p++; 
     } 
     *root = pop(&X); 
    } 

    int evaluatetree(struct node *x) 
    { 
     if(x->kind == 'O') 
     { 
      int op1 = evaluatetree(x->left); 
      int op2 = evaluatetree(x->right); 
      switch (x->op) 
      { 
      case '+': return op1 + op2; 
      case '-': return op1 - op2; 
      case '*': return op1 * op2; 
      case '/': return op1/op2; 
      default: return 0; 
      } 
     } 
     else 
      return (x->number); 
    } 

    void inorder(struct node *x) 
    { 
     if(x != NULL) 
     { 
      inorder(x->left); 

      if(x->kind == 'O') 
       printf("%c ",x->op); 
      else 
       printf("%d ",x->number); 

      inorder(x->right); 
     } 
    } 

    void preorder(struct node *x) 
    { 
     if(x != NULL) 
     { 
      if(x->kind == 'O') 
       printf("%c ",x->op); 
      else 
       printf("%d ",x->number); 

      preorder(x->left); 
      preorder(x->right); 
     } 
    } 

    void postorder(struct node *x) 
    { 
     if(x != NULL) 
     { 
      postorder(x->left); 
      postorder(x->right); 

      if(x->kind == 'O') 
       printf("%c ",x->op); 
      else 
       printf("%d ",x->number); 
     } 
    } 

    int main() 
    { 
     struct node *r; 
     postfix2exptree("100 50 - 2 /",&r); 
     printf("Inorder = "); 
     *inorder®; 
     printf("\nPreorder = "); 
     preorder®; 
     printf("\nPostprder = "); 
     postorder®; 
     printf("\nResult = %d\n",evaluatetree®); 
     return 0; 
    } 
+0

Cの文字は意味がありませんが、文字Aのような別の文字になりますが、あなたのコードはファンキーに見えます。この行は一番下にあります: '*inorder®;'、それは合法ではありませんC.このコードはどこから入手しましたか? –

+0

良い誰かが特定の文字の組み合わせをキーボード以外の記号で自動的に置換するプラットフォーム上のブログ記事からこのコードを取得したとき、ここでは '(r) 'の代わりにこのように挿入されました。 –

+0

おそらくここから取られる(http://www.dreamincode.net/forums/topic/37428-converting-and-evaluating-infix-postfix-and-prefix-expressions-in-c/) –

答えて

2

を[エラー]無効な変換を取られながら、これが「スマート」テキストエディタのアーチファクトです。

struct node * rがある
inorder(r); 
printf("\nPreorder = "); 
preorder(r); 

を:

コードを読み取るようになっています。

原作者がテキストを貼り付けて、スマートテキスト編集を著作権表示に変換(r)しました。

inorderおよびpreorderは、コードの前半で定義された関数です。