首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >此内插到后缀转换c++代码有什么问题?

此内插到后缀转换c++代码有什么问题?
EN

Stack Overflow用户
提问于 2013-11-10 16:15:25
回答 1查看 380关注 0票数 0

我有一个从infix到后缀表达式转换的程序,但是它不能正常工作.例如:如果输入表达式a+b+(c-d)*e,它将输出后缀表达式作为abcd-++e*而不是abcd-e*++

代码语言:javascript
运行
复制
char inputexp[50], stacks[50], resultexp[50];  
int stacktop=-1, resulttop=-1;

void priority()
{
    '^'>'/'>'*'>'+'>'-';
}

void push(char a)    
{
    stacktop++;  
    stacks[stacktop]=a;
}

void pop()
{
    resulttop++;  
    resultexp[resulttop]=stacks[stacktop];
    --stacktop;
}

void input()     
{   
    cout<<"Enter the infix expression=";  
    scanf("%s", inputexp);
}

void operandadd (char a)
{
    resulttop++;
    resultexp[resulttop]=a; 
}

void operatorfound (char a)    
{
    if(stacktop==-1||stacks[stacktop]=='(')
    {
        push(a);
    }
    else
    {         
        if(a<stacks[stacktop])        
        {              
            while(stacks[stacktop]>a&&stacks[stacktop]!='(')               
            {       
                pop();             
            }       
            push(a);        
        }    
        else         
        {            
            push(a);        
        }       
    }   
}

void rightparenthesisfound (char a)    
{        
    while(stacks[stacktop]!='(')        
    {           
        pop();       
    }       
    --stacktop;    
}

void leftparenthesisfound (char a)   
{        
    push(a);   
}

void variablefound(char a)   
{      
    resulttop++;     
    resultexp[resulttop]=a;   
}

void result()   
{      
    cout<<"Postfix Expression:"<<endl;

    for(int i=0; i<strlen(resultexp); i++)       
    {            
        cout<<resultexp[i]<<endl;        
    }    
}

int main()    
{       
    input();        
    cout<<strlen(inputexp)<<endl;
    priority();

    for(int i=0; i<strlen(inputexp); i++)         
    {            
        if(inputexp[i]=='+'||inputexp[i]=='-'||inputexp[i]=='*'||inputexp[i]=='/'||inputexp[i]=='^')             
        {                 
            operatorfound(inputexp[i]);                 
            cout<<stacks<<endl;    
        }             
        else if(inputexp[i]=='(')
        {                 
           leftparenthesisfound(inputexp[i]);            
        }             
        else if(inputexp[i]==')')        
        {
           cout<<"RIGHT "<<"STACK:"<<stacks<<endl;    
           rightparenthesisfound(inputexp[i]);                
           cout<<"RIGHT PARENTHESIS FOUND:"<<" Stack: "<<stacks<<"\t"<<"Result:"<<resultexp;    
        }            
        else             
        {                 
            variablefound(inputexp[i]);                 
            cout<<"RESULT: "<<resultexp<<endl;             
        }         
    }

    if(stacktop!=-1)         
    {             
        while(stacktop!=-1)            
        {                
           pop();                
        }        
    }

    cout<<endl<<resultexp<<endl;       
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-10 17:05:56

这个函数什么也不做:

代码语言:javascript
运行
复制
void priority()
{
    '^'>'/'>'*'>'+'>'-';
}

从技术上讲,它将一个字符与另一个字符进行比较。结果永远不会返回。它看起来更像是模糊代码。

优先级可以通过多种方式实现,一种常见的方法是由if语句顺序在代码中实现。第一个if比较是最高优先级,下一个else if是下一个较低优先级,依此类推。

另一种方法是使用关联。该关联包含与符号关联的优先级编号:

代码语言:javascript
运行
复制
{'^', 1}
{'/', 2}
{'*', 3}
{'+', 4}
{'-', 5}

这可以通过查找表或硬编码为switch语句来实现。

顺便说一句,您可能希望使用优先一词,而不是priority

另外,你应该让你的函数返回一些东西,否则外部世界将不知道它在做什么。

非常重要:在web上搜索"infix to后缀转换c++",它将返回许多示例供您考虑.

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

https://stackoverflow.com/questions/19891963

复制
相关文章

相似问题

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