c语言如何逆向书写

问题描述

这是我的第一个问题,请原谅非技术语言
我正在制作一个将中缀转换为前缀和后缀的程序。我将中缀添加到正在工作的 postfix。现在,当我想中缀前缀时,我们需要反转表达式。所以我想从相反的方向读取中缀。

while(*e != '\0')
    {
        if(isalpha(*e))
            printf("%c ",*e);
        else if(*e == '(')
            push(*e);
        else if(*e == ')')
        {
            while((x = pop()) != '(')
                printf("%c ",x);
        }
        else
        {
            while(priority(stack[top]) >= priority(*e))
                printf("%c ",pop());
            push(*e);
        }
        e++;
    }  

以上是后缀中缀的一部分,其中 e 是扫描字符串的指针。在 pre 的中缀中,我计划将 e++ 替换为 e-- 但是在第一行中,我们看到它直接打印字符,所以我需要反转方向
例如。


+ba

解决方法

首先,欢迎来到stackoverflow。 (我也是新来的。)

实际上,您的标题并没有完全描述您的需求:也就是说,“反向写作”不足以实现您的目标。

考虑输入中缀表达式 a + b * c。您已完成将其转换为后缀为 a b c * + 的子任务(假设 * 的优先级高于 +)。正确的前缀转换为 + a * b c。请注意,这与后缀结果的反转不同(即,它不是 + * c b a)。总而言之,前缀表达式不仅仅是后缀表达式的反转。

那么,我将如何解决您的任务?我会创建一个包含三个组件的系统。第一个组件处理您的输入并生成一个简单的“解析树”,其图形表示为:

  +  
 / \
a   *
   / \  
  b   c

这个的主要数据结构是一个“解析树节点”,看起来像这样:

struct Node {
    Node* leftChild;
    Node* rightChild;
    char symbol;
};

第二个组件从此解析树转换为后缀表达式(实现与您原始帖子所做的相同)。

第三个组件从此解析树转换为前缀表达式。这样做只是一个递归过程(给定一个特定节点,首先输出该节点的符号,然后递归应用于左侧,然后递归应用于右侧)。如果您需要有关如何执行此操作的进一步指导,请告诉我。