c++数据结构课程设计 表达式求值 求大神帮忙看看(代码可能有点长,没有编译错误)
核心函数expression(主要帮我看看那里)好像没有做下去就结束了intexpression(strings,stack_numnums,stack_opops){i...
核心函数expression(主要帮我看看那里 )好像没有做下去 就结束了
int expression(string s,stack_num nums,stack_op ops)
{
int a,b,d,n,sum;
char k,e,c;
string t="";
for(int i=0;i<s.size();)//依次从表达式字符串读入字符
{
//cout<<"读入字符:"<<s[i]<<" ";
if(isnum(s[i])==true)
{
if(isnum(s[i])==true)
{
t=t+s[i];
i++;//连续的若干个数码字符
}
sscanf(t.c_str(),"%d",&n);
nums.push(n);
//nums.status();
}
else
{
if(ops.empty()==true) ops.push(s[i]);
if( first(s[i],ops.gettop(k)) >0 && s[i]!=')' || ops.gettop(k)=='(' && s[i]!=')')
{
ops.push(s[i]);
//ops.status();
i++;
break;
}
else if(s[i]=='(')
{
ops.push(s[i]);
i++;
break;
}
else if( first(s[i],ops.gettop(k)) <0 )
{
nums.pop(a);
nums.pop(b);//弹出运算数栈顶的两个元素依次作为右边和左边的运算数
ops.pop(c);//弹出运算符栈顶的元素作为运算符
d=calculate(b,a,c);//进行运算
nums.push(d);//将结果入栈到运算数栈
//ops.status();
i++;
break;
}
else if(s[i]==')')
{
if(ops.gettop(k)=='(')
{
ops.pop(e);
i++;
break;
}
else
{
nums.pop(a);
nums.pop(b);
ops.pop(c);
d=calculate(b,a,c);
nums.push(d);
//ops.status();
i++;
}
}
}
if(s[i]=='\0' && ops.empty()!=true)//如果表达式已读完而且运算符栈不空
{
nums.pop(a);
nums.pop(b);
ops.pop(c);
d=calculate(b,a,c);
nums.push(d);
}
}
return nums.gettop(sum);
}
除了加减乘除还有乘方的还有括号。 最后以;为结束标志 展开
int expression(string s,stack_num nums,stack_op ops)
{
int a,b,d,n,sum;
char k,e,c;
string t="";
for(int i=0;i<s.size();)//依次从表达式字符串读入字符
{
//cout<<"读入字符:"<<s[i]<<" ";
if(isnum(s[i])==true)
{
if(isnum(s[i])==true)
{
t=t+s[i];
i++;//连续的若干个数码字符
}
sscanf(t.c_str(),"%d",&n);
nums.push(n);
//nums.status();
}
else
{
if(ops.empty()==true) ops.push(s[i]);
if( first(s[i],ops.gettop(k)) >0 && s[i]!=')' || ops.gettop(k)=='(' && s[i]!=')')
{
ops.push(s[i]);
//ops.status();
i++;
break;
}
else if(s[i]=='(')
{
ops.push(s[i]);
i++;
break;
}
else if( first(s[i],ops.gettop(k)) <0 )
{
nums.pop(a);
nums.pop(b);//弹出运算数栈顶的两个元素依次作为右边和左边的运算数
ops.pop(c);//弹出运算符栈顶的元素作为运算符
d=calculate(b,a,c);//进行运算
nums.push(d);//将结果入栈到运算数栈
//ops.status();
i++;
break;
}
else if(s[i]==')')
{
if(ops.gettop(k)=='(')
{
ops.pop(e);
i++;
break;
}
else
{
nums.pop(a);
nums.pop(b);
ops.pop(c);
d=calculate(b,a,c);
nums.push(d);
//ops.status();
i++;
}
}
}
if(s[i]=='\0' && ops.empty()!=true)//如果表达式已读完而且运算符栈不空
{
nums.pop(a);
nums.pop(b);
ops.pop(c);
d=calculate(b,a,c);
nums.push(d);
}
}
return nums.gettop(sum);
}
除了加减乘除还有乘方的还有括号。 最后以;为结束标志 展开
1个回答
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询