微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c语言如何逆向书写

如何解决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;
};

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。