首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从中缀创建rpn表达式

从中缀创建rpn表达式
EN

Stack Overflow用户
提问于 2012-12-19 20:06:26
回答 1查看 636关注 0票数 0

我尝试将中缀符号表达式转换为后缀标记(RPN)。下面是函数:

代码语言:javascript
复制
String createRPN(String infix)
{
     Stack *stack = node_alloc(1); //stack pointer
     stack->next = NULL;
     String ptr; //index
     String RPN = malloc(strlen(infix) + 1);
     String start = RPN;

     for (ptr = infix; *ptr != '\0'; ptr++)
     {
         if (isNum(*ptr) || (*ptr == ' ')) *RPN++ = *ptr;
         else if (*ptr == '(') push(&stack, '(');
         else if (isOper(*ptr))
         {
              while ((stack != NULL) && (stack->value != '('))
              {
                    if (compareOper(stack->value, *ptr)) *RPN++ = pop(&stack);
                    else break;
              }
              push(&stack, *ptr);
         } 
         else if (*ptr == ')')
         {
              while ((stack != NULL) && (stack->value != '(')) *RPN++ = pop(&stack);
              if (stack != NULL) pop(&stack);
         }
         else;
     }
     while (stack != NULL) *RPN++ = pop(&stack);
     *RPN = '\0';

     return start;
}

下面是堆栈代码:

代码语言:javascript
复制
typedef struct node
{
   int value;
   struct node *next;   
}Stack;

void push(Stack **node, int value)
{
     Stack *temp = node_alloc(1);
     if (temp == NULL) return;
     temp->value = value;
     temp->next = *node;
     *node = temp;
}

int pop(Stack **node)
{
    if (*node == NULL) return 0;

    int num = (*node)->value;
    Stack *temp = (*node)->next;
    free(*node);
    *node = (temp == NULL) ? NULL : temp;

    return num;
}

但在我输入中缀字符串之后,示例如下:

代码语言:javascript
复制
2 * ((3 + 5) + (6 + 2) * 5)

程序崩溃了,我需要你的帮助来发现我的错误..

EN

回答 1

Stack Overflow用户

发布于 2012-12-19 20:16:08

这一点:

代码语言:javascript
复制
 String RPN = malloc(sizeof(char*) * strlen(infix));

都是错的。

你分配了sizeof (char *) (指向字符的指针)的单位,而你应该用普通字符来思考。此外,您还没有考虑到终止字符。

您需要:

代码语言:javascript
复制
String RPN = malloc(strlen(infix) + 1);

(永远)乘以sizeof (char)是没有意义的,因为它肯定是1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13952148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档