`
endual
  • 浏览: 3512652 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

字符串表达式求值(虽然代码是错误的,但是还是贴出了)

    博客分类:
  • java
 
阅读更多

 

代码是错误的,NND!!,如果是高手,就改下吧。

 

 

用栈和后缀表达式来求解

 

栈 

 

package endual.iteye.com.main;

public class StackX {

	private char[] arrays = null ;
	private int    maxSize ;
	private int    top ;
	
	
	public StackX(int maxSize) {
		this.arrays = new char[maxSize] ;
		maxSize = maxSize;
		this.top = 0 ;
	}
	
	//默认是在正常的范围内
	public void push (char newChar) {
		
		this.arrays[top] = newChar ;
		this.top++ ;
		
	}
	
	//上面那个给弄出来
	public char pop () {
		
		char topChar = 'x' ;
		topChar = this.arrays[top-1] ;
		top-- ;
		return topChar  ;
	}
	
	//获取栈的个数
	public int getLength() {
		
		return this.top ;
	}
	
	
	//判断栈是否为空
	public boolean isFull() {
		
		if (this.getLength() == 0) {
			return false ;
		}
		
		return true ;
	}
	
	
}

 

 运行类:

 

    package endual.iteye.com.main;

public class MainTest {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		test();
	}

	private static void test() {
		
		String _s = "3-(5+4)" ;
		char[] arrs = _s.toCharArray() ;
		
	
		int maxSize = arrs.length ;
	
		int nLabel = 0 ;
		for (int i=0; i<maxSize; i++) {
			
			if (isLabel(arrs[i])) {
				nLabel++ ;
			}
			
		}
		
		StackX stack = new StackX(nLabel) ;
		String _ans = "" ;
		for (int i=0; i<maxSize; i++) {
			
			char newChar = arrs[i] ; //读取字符
			//判断该字符不是运算符
			if (isLabel(newChar)) {
				//判断栈是否为空
				if (!stack.isFull() || isLabel(newChar) || isLeft(newChar)) { //如果站为空了
					stack.push(newChar) ;
				    
				} else { //如果站不为空,那么就跳出来一个一个字符
					
					if (stack.isFull() ) { //如果栈有东西
						
						if (isLeft(newChar)) { // 如果是左括号,加入到栈去
							stack.push(newChar) ;
							continue ; // 终止,下一轮
						}
						
						//判断该跳出来的字符是与当前的字符进行比较
						 if (isRight(newChar)) { //那么要弹出了
							 char topChar = stack.pop() ;
							 while (topChar == '(') {
								 _ans = _ans + topChar ;
								 topChar = stack.pop() ;
							 }
							 
							 continue ;
						}
						 
						 char topChar = stack.pop() ;
						//那么剩余的就是减号或者加号了
						 _ans = _ans + topChar ;
						 stack.push(newChar) ;
					}
					else { //如果站为空
						
					}
				}
			}
			else { //如果不是运算符号
				
				_ans = _ans + newChar ;
			}
		} // for 
		
		while (stack.isFull()) {
			
			char topChar = stack.pop() ;
			_ans = _ans + topChar ;
			
		}
		
		System.out.println(_ans);
		
	}
	
	public static boolean isHighClass(char newChar) {
		
		if ('/' == newChar) {
			return true ;
		}
		if ('*' == newChar) {
			return true ;
		}
		
		return false ;
	}
	
	public static boolean isLeft(char newChar) {
		
		if ('(' == newChar) {
			return true ;
		}
		
		return false ;
		
	}
	
   public static boolean isRight(char newChar) {
		
		if (')' == newChar) {
			return true ;
		}
		
		return false ;
		
	}
	
	
	//判断是否是运算符号
	public static boolean isLabel(char newChar) {
		
		
		if ('-' == newChar) {
			return true ;
		}
		if ('+' == newChar) {
			return true ;
		}
		if ('/' == newChar) {
			return true ;
		}
		if ('*' == newChar) {
			return true ;
		}
		if ('(' == newChar) {
			return true ;
		}
		if (')' == newChar) {
			return true ;
		}
		
		
		return false ; //不是运算符
		
		
		
	}
	

}
 

 

 

 

 

分享到:
评论

相关推荐

    正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的...

    字符串中加减法main.c

    2、表达式中不含圆括号、空格符,而且不会出现错误的表达式; 【输入形式】 在控制台中输入一个整数算术运算表达式。 【输出形式】 向控制台输出计算结果(为整数)。 【样例输入】 10+52-28 ...

    C++ 算数表达式分析模块(附原理简介)

    表示式分析可以用来计算一般的算数表达式,可以作为函数计算的模块。 目前版本为1.3,附带实现原理... * GetExprErrorStr 获取表达式错误代码的表示字符串 * GetResultErrorStr 获取求解错误代码的表示字符串 */

    正则表达式

    当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配 的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / [a-z] + \ d+/.但是...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    22. 匹配由26个英文字母的大写组成的字符串 23 匹配由26个英文字母的小写组成的字符串 24 匹配由数字和26个英文字母组成的字符串; 25 匹配由数字、26个英文字母或者下划线组成的字符串; java源码: /* * Created ...

    java 正则表达式

    应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;} 匹配空行的正则表达式:\n[\s| ]*\r 匹配html标签的正则...

    Javascript经典正则表达式

    这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value;

    js正则表达式使用

    这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value;

    java代码验证日期格式正则表达式(包含闰年验证)带注释

    /** * @param 日期验证,验证的格式有: * "yyyyMM","yyyyMMdd","yyyyMMdd HH:mm:ss", * "yyyy-MM","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss" * "yyyy.MM","yyyy.MM.dd","yyyy.MM.dd HH:mm:ss" * "yyyy/MM","yyyy/MM...

    javascript文档

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    JavaScript正则表达式匹配字符串字面量

    第一次遇到这个问题, 是大概两年前写代码高亮, 从当时的解决方案到现在一共有三代, 嘎嘎. 觉得还是算越来越好的. 第一代: //那个时候自己正则还不算很精通, 也没有(?:...)这种习惯, 是以寻找结束引号为入口写出的这...

    正则表达式30分钟入门教程

    说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述...

    C++:中缀表达式转变为逆波兰表达式

    本代码可简单实现中缀表达式转换为逆波兰表达式,设计的栈底字符为#号,输入串默认尾部追加#号,没有单独将非运算符归入各自的栈,只是输出成一个逆波兰表达式的字符串。比较简单,如有错误之处,望您评论指出。

    VBScript 语言参考

    Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的反正切值。 调用语句 将控制移交 Sub 或 Function 过程。 CBool 函数 返回已被转换为 Boolean 子类型的变体...

    VBScript 语言参考中文手册CHM

    Description 属性 返回或者设置说明某个错误的字符串。 Dictionary 对象 存储数据键、项目对的对象。 Dim 语句 声明变量并分配存储空间。 除法运算符 (/) 两数相除并以浮点数格式返回商。 Do...Loop 语句 当条件...

    VBSCRIP5 -ASP用法详解

    Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的反正切值。 调用语句 将控制移交 Sub 或 Function 过程。 CBool 函数 返回已被转换为 Boolean 子类型的变体...

    JScript 语言参考

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    微软JavaScript手册

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    VBSCRIPT中文手册

    Asc 函数 返回字符串首字母的 ANSI 字符代码。 赋值运算符 (=) 给变量或属性赋值。 Atn 函数 返回数的反正切值。 调用语句 将控制移交 Sub 或 Function 过程。 CBool 函数 返回已被转换为 Boolean 子类型的变体...

Global site tag (gtag.js) - Google Analytics