Java 版 (精华区)
发信人: DreamWeaver (小样儿的,我气不死你?), 信区: Java
标 题: [合集]每日一题:(2)字符串转表达式
发信站: 哈工大紫丁香 (2002年08月20日19:39:45 星期二), 站内信件
────────────────────────────────────────
bille (bille) 于 2002年08月15日15:40:23 星期四 说道:
设为包含parser.jar的路径就行了吧?
【 在 bali (阿奔) 的大作中提到: 】
: 不需要什么安装啊,只要把解析xml的包放到classpath中使得
: 你的程序编译、运行的时候能找到就可以。
: 【 在 bille (bille) 的大作中提到: 】
: : rt
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日10:07:33 星期三 说道:
编写一控制台程序,从控制台中读取一字符串,形如“a+b-c*d/e”
在程序中将此字符串转化为表达式,例如:result=a+b-c*d/e,然后将
表达式中的变量从左到右依次初始化为1、2、3....,输出result值。
参考:
pleast input the String:
a+b+c+d
the exp is result=a+b+c+d
result=1+2+3+4=10
要求:
1. 变量名不要求与字符串中的字符相同
2. 暂定变量最多为5个,运算符为 +、-、*、/
3. 程序有良好的风格并有文档注释
4. 有详细的算法分析
附加:如果有能力可以将变量个数设为不限,将运算符加上(、)、等。
参考答案在两天内公布。
────────────────────────────────────────
goldenleaf (** 流光飞舞 **) 于 2002年08月14日10:12:58 星期三 说道:
如果java里也能象数据库中有宏代换就好了//java里有没有我不知道呀,呵呵
假定有宏代换,这样的问题就是很easy的
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 编写一控制台程序,从控制台中读取一字符串,形如“a+b-c*d/e”
: 在程序中将此字符串转化为表达式,例如:result=a+b-c*d/e,然后将
: 表达式中的变量从左到右依次初始化为1、2、3....,输出result值。
: 参考:
: pleast input the String:
: a+b+c+d
: the exp is result=a+b+c+d
: result=1+2+3+4=10
────────────────────────────────────────
elife (木木@找到真实的自己) 于 2002年08月14日10:17:46 星期三 说道:
大家别管他
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 编写一控制台程序,从控制台中读取一字符串,形如“a+b-c*d/e”
: 在程序中将此字符串转化为表达式,例如:result=a+b-c*d/e,然后将
: 表达式中的变量从左到右依次初始化为1、2、3....,输出result值。
: 参考:
: pleast input the String:
: a+b+c+d
: the exp is result=a+b+c+d
: result=1+2+3+4=10
────────────────────────────────────────
zhangyan (Sleepless in Patterns) 于 2002年08月14日12:01:37 星期三 说道:
写一个程序,不太切题 只有add 没有运算优先
#file expr.java
interface expr{
public int value();
}
#file addexpr.java
class addexpr implements expr{
expr le;
expr re;
public addexpr(expr lle, expr rre){
le=lle;
re=rre;
}
public int value(){
return (le.value() + re.value());
}
}
#file num.java
class num implements expr{
static int count=1;
int _val;
public num(){
_val=count++;
}
public int value(){
return _val;
}
}
#file cal.java
import java.util.*;
class cal{
public static void main(String[] arg){
expr res_= new num(); //assume the fist of input is not operator
for(int i=1;i<arg[0].length()-1;++i){
if(Character.isLetter(arg[0].charAt(i))){
res_= new num();
}else{
expr tmp=res_;
res_= new addexpr(tmp,new num()); //doesn't consider input
correctness
++i;
} //only deal with add expressions
}
System.out.println("Resault of "+arg[0]+" is:"+res_.value());
}
}
【 在 DreamWeaver ( 戴眼镜的流氓程序员) 的大作中
提到: 】: 编写一控制台程序,从控制台中读取一字符串,形如“a+b-c*d/e”
: 在程序中将此字符串转化为表达式,例如:result=a+b-c*d/e,然后将
: 表达式中的变量从左到右依次初始化为1、2、3....,输出result值。
: 参考:
: pleast input the String:
: a+b+c+d
: the exp is result=a+b+c+d
: result=1+2+3+4=10
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日15:41:25 星期三 说道:
呵呵,这道题真的不是很容易呢!
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 编写一控制台程序,从控制台中读取一字符串,形如“a+b-c*d/e”
: 在程序中将此字符串转化为表达式,例如:result=a+b-c*d/e,然后将
: 表达式中的变量从左到右依次初始化为1、2、3....,输出result值。
: 参考:
: pleast input the String:
: a+b+c+d
: the exp is result=a+b+c+d
: result=1+2+3+4=10
────────────────────────────────────────
DreamWeaver (戴眼镜的流氓程序员) 于 2002年08月14日15:42:57 星期三 说道:
不考虑优先级这道题就没有多大难度了
呵呵
【 在 zhangyan (Sleepless in Patterns) 的大作中提到: 】
: 写一个程序,不太切题 只有add 没有运算优先
: #file expr.java
: interface expr{
: public int value();
: }
: #file addexpr.java
: class addexpr implements expr{
────────────────────────────────────────
zhangyan (Sleepless in Patterns) 于 2002年08月14日15:50:53 星期三 说道:
也难不了多少
这种简单的表达式,用编译原理的东西做起来反而蹩脚
还是用interpreter模式来的方便
【 在 DreamWeaver (戴眼镜的流氓程序员) 的大作中提到: 】
: 不考虑优先级这道题就没有多大难度了
: 呵呵
: 【 在 zhangyan (Sleepless in Patterns) 的大作中提到: 】
: : 写一个程序,不太切题 只有add 没有运算优先
: : #file expr.java
: : interface expr{
: : public int value();
: : }
: : #file addexpr.java
: : class addexpr implements expr{
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.378毫秒