求字符串表达式的值
用户从键盘输入一个数学表达式 如:3+5*(4+8)/2,求值
谁能提供一下详细的代码,最好有注释
问题点数:100、回复次数:13Top
1 楼j_x_y(稀里糊涂)回复于 2005-06-19 02:36:26 得分 0
3+5*(4+8)/2 是一个字符串Top
2 楼OpenHero(开勇)回复于 2005-06-19 03:07:06 得分 0
怎么要求都这么高阿???
有代码,还有注释???
有这样学习编程的马?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
随便找一个计算器的代码就好了~~~
楼主网上好多的Top
3 楼nasi00(莫傲·逍遥)回复于 2005-06-19 05:27:12 得分 80
以前写的,还支持小数呢……
#include <iostream>
using namespace std;
#include <stack>
#include <string>
#include <cstdlib>
void init(string& s)
{
getline(cin,s);
s+="@";
}
bool is_optr(char c)
{
string optr_list("+-*/()@");
for(int i=0;i<optr_list.size();i++)
if(c==optr_list[i])
return true;
return false;
}
char first(char op1, char op2)
{
string tab[7];
tab[0]=">><<<>>";
tab[1]=">><<<>>";
tab[2]=">>>><>>";
tab[3]=">>>><>>";
tab[4]="<<<<<=E";
tab[5]=">>>>E>>";
tab[6]="<<<<<E=";
string optr_list("+-*/()@");
int op1_loc, op2_loc;
for(op1_loc=0;op1_loc<optr_list.size();op1_loc++)
if(optr_list[op1_loc]==op1)
break;
for(op2_loc=0;op2_loc<optr_list.size();op2_loc++)
if(optr_list[op2_loc]==op2)
break;
return tab[op1_loc][op2_loc];
}
double operate(double x, char op, double y)
{
switch(op) {
case '+':
return x+y;
break;
case '-':
return x-y;
break;
case '*':
return x*y;
break;
case '/':
return x/y;
break;
}
return -1;
}
double calc(string& s)
{
stack<char> optr;
optr.push('@');
stack<double> opnd;
char c=s[0];
s.erase(0,1);
while( c!='@' || optr.top()!='@' ) {
if( !is_optr(c) ) {
string num;
num.insert(num.begin(), c);
int loc=0;
while( !is_optr(s[loc]) )
loc++;
string num2(s,0,loc);
num+=num2;
s.erase(0,loc);
double x=atof(num.c_str());
opnd.push(x);
c=s[0];
s.erase(0,1);
}
else {
switch( first(optr.top(), c) ) {
case '<':
optr.push(c);
c=s[0];
s.erase(0,1);
break;
case '=':
optr.pop();
c=s[0];
s.erase(0,1);
break;
case '>':
char op;
op=optr.top();
optr.pop();
double a,b;
a=opnd.top();
opnd.pop();
b=opnd.top();
opnd.pop();
double res;
res=operate(b,op,a);
opnd.push(res);
break;
}
}
}
return opnd.top();
}
int main()
{
string exp;
double ans;
init(exp);
ans=calc(exp);
cout<<ans<<endl;
return 0;
}Top
4 楼yvhkdragon(剑客)回复于 2005-06-19 09:13:42 得分 0
顶!Top
5 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2005-06-19 09:49:20 得分 0
不错.UPTop
6 楼jixingzhong(瞌睡虫·星辰)回复于 2005-06-19 10:06:07 得分 0
不错不错!!
UP!!
Top
7 楼zhangyuebin()回复于 2005-06-19 10:06:16 得分 0
顶!!!Top
8 楼yangman211()回复于 2005-06-19 12:34:58 得分 0
upTop
9 楼whatsouta(某疯子)回复于 2005-06-19 14:02:41 得分 5
数据结构和算法 教程上有Top
10 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-19 14:14:45 得分 5
编译原理上有。Top
11 楼foochow(无聊,灌水......)回复于 2005-06-19 15:07:30 得分 5
这个很简单啊,好多书上都有,多动手翻翻书^_^Top
12 楼csucdl(csucdl)回复于 2005-06-19 15:11:02 得分 0
路过学习
Top
13 楼mostideal(三甲)回复于 2005-06-19 17:39:31 得分 5
看编译原理。。Top




