| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2732 人关注过本帖
标题:谁知道用C++编一个简单的计算器的编译器怎么弄!?等待回答哦!
只看楼主 加入收藏
zhangzhangzi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-5-22
收藏
 问题点数:0 回复次数:6 
谁知道用C++编一个简单的计算器的编译器怎么弄!?等待回答哦!
谁知道用C++编一个简单的计算器的编译器怎么弄!?等待回答哦! 有点急用!帮帮忙啦! 如果会的话,到下面的地方给我留言吧! http://www.x-woods.com/service/book/x.aspx?id=118212 拜托哦!
搜索更多相关主题的帖子: 计算器 编译 book 
2005-05-22 10:32
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
什么是计算器的编译器

编译器比计算器难得多了。
2005-05-22 14:06
wangyuming
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-5-24
收藏
得分:0 
是啊。编辑器。可不是很容易就搞定的啊。你是不是搞错了。编辑器你也想写啊。
你应该是想写计算器的程序吧。
2005-05-24 20:50
WP520
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-6-19
收藏
得分:0 
你会了吗。。借我参考一下~!
2006-06-19 11:05
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
计算机的编辑器?

能再说的具体点儿吗?

I am a big fan of c plus plus.
2006-06-20 11:02
phycise
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-6-29
收藏
得分:0 
是啊,说清楚一点,究竟是编辑器,还是计算器????????????????
2006-07-04 10:30
liyimin007
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-9-12
收藏
得分:0 

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <cstring>
using namespace std;

enum types { DELIMITER = 1, VARIABLE, NUMBER};

class parser {
char *exp_ptr; // points to the expression
char token[80]; // holds current token
char tok_type; // holds token's type

void eval_exp2(double &result);
void eval_exp3(double &result);
void eval_exp4(double &result);
void eval_exp5(double &result);
void eval_exp6(double &result);
void atom(double &result);
void get_token();
void serror(int error);
int isdelim(char c);
public:
parser();
double eval_exp(char *exp);
};

// parser constructor
parser::parser()
{
exp_ptr = NULL;
}

// Parser entry point.
double parser::eval_exp(char *exp)
{
double result;

exp_ptr = exp;

get_token();
if(!*token) {
serror(2); // no expression present
return 0.0;
}
eval_exp2(result);
if(*token) serror(0); // last token must be null
return result;
}

// Add or subtract two terms.
void parser::eval_exp2(double &result)
{
register char op;
double temp;

eval_exp3(result);
while((op = *token) == '+' || op == '-') {
get_token();
eval_exp3(temp);
switch(op) {
case '-':
result = result - temp;
break;
case '+':
result = result + temp;
break;
}
}
}

// Multiply or divide two factors.
void parser::eval_exp3(double &result)
{
register char op;
double temp;

eval_exp4(result);
while((op = *token) == '*' || op == '/' || op == '%') {
get_token();
eval_exp4(temp);
switch(op) {
case '*':
result = result * temp;
break;
case '/':
result = result / temp;
break;
case '%':
result = (int) result % (int) temp;
break;
}
}
}

// Process an exponent
void parser::eval_exp4(double &result)
{
double temp, ex;
register int t;

eval_exp5(result);
if(*token== '^') {
get_token();
eval_exp4(temp);
ex = result;
if(temp==0.0) {
result = 1.0;
return;
}
for(t=(int)temp-1; t>0; --t) result = result * (double)ex;
}
}

// Evaluate a unary + or -.
void parser::eval_exp5(double &result)
{
register char op;

op = 0;
if((tok_type == DELIMITER) && *token=='+' || *token == '-') {
op = *token;
get_token();
}
eval_exp6(result);
if(op=='-') result = -result;
}

// Process a parenthesized expression.
void parser::eval_exp6(double &result)
{
if((*token == '(')) {
get_token();
eval_exp2(result);
if(*token != ')')
serror(1);
get_token();
}
else atom(result);
}

// Get the value of a number.
void parser::atom(double &result)
{
switch(tok_type) {
case NUMBER:
result = atof(token);
get_token();
return;
default:
serror(0);
}
}

// Display a syntax error.
void parser::serror(int error)
{
static char *e[]= {
"Syntax Error",
"Unbalanced Parentheses",
"No expression Present"
};
cout << e[error] << endl;
}

// Obtain the next token.
void parser::get_token()
{
register char *temp;

tok_type = 0;
temp = token;
*temp = '\0';

if(!*exp_ptr) return; // at end of expression

while(isspace(*exp_ptr)) ++exp_ptr; // skip over white space

if(strchr("+-*/%^=()", *exp_ptr)){
tok_type = DELIMITER;
// advance to next char
*temp++ = *exp_ptr++;
}
else if(isalpha(*exp_ptr)) {
while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;
tok_type = VARIABLE;
}
else if(isdigit(*exp_ptr)) {
while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;
tok_type = NUMBER;
}

*temp = '\0';
}

// Return true if c is a delimiter.
int parser::isdelim(char c)
{
if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)
return 1;
return 0;
}
int main()
{
char expstr[80];

cout << "Enter a period to stop.\n";

parser ob; // instantiate a parser

for(;;) {
cout << "Enter expression: ";
cin.getline(expstr, 79);
if(*expstr=='.') break;
cout << "Answer is: " << ob.eval_exp(expstr) << "\n\n";
};

return 0;
}

2007-09-12 15:48
快速回复:谁知道用C++编一个简单的计算器的编译器怎么弄!?等待回答哦!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037281 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved