`
endual
  • 浏览: 3557971 次
  • 性别: 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 ; //不是运算符
		
		
		
	}
	

}
 

 

 

 

 

分享到:
评论

相关推荐

    表达式求值代码

    3. **表达式解析**:遍历输入的字符串表达式,对每个字符进行判断并执行相应操作。 4. **运算逻辑**:根据栈中的运算符和操作数执行相应的计算,并更新栈。 5. **错误处理**:`Exception` 文件可能包含处理异常情况...

    Java实现计算字符串表达式

    这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节没有提供,但我们可以基于一般的方法和常用的库来探讨这个主题。 首先,计算字符串表达式的基本步骤通常包括以下几...

    Delphi 计算字符串表达式

    ### Delphi 计算字符串表达式 在 Delphi 编程语言中,处理字符串表达式的计算是一项常见的任务,尤其是在需要动态解析数学表达式的情况下。本文将深入探讨如何编写一个简单的数值字符表达式计算函数,该函数能够...

    字符串表达式解释计算动态连接库

    字符串表达式解释计算动态连接库是一种程序开发工具,主要用于帮助开发者在他们的应用程序中处理和解析字符串形式的表达式。这个动态链接库(DLL)提供了一种高效且灵活的方式来执行基于字符串的计算,使得程序员...

    字符串表达式解析求值算法

    在编程领域,字符串表达式解析求值算法是一种关键的技术,尤其在计算器应用、脚本语言或者自定义计算逻辑实现中非常常见。这个算法的核心任务是将由字符组成的字符串转换为可执行的数学表达式,同时处理变量和各种...

    输入一个字符串表达式,计算其值.rar_字符串表达式_表达式字符串

    在编程领域,处理字符串表达式并计算其值是一项常见的任务,尤其在动态语言和脚本环境中。这个主题涉及到了解析、语法分析、操作符优先级和括号匹配等多个概念。以下将详细介绍这些知识点: 1. **字符串表达式**:...

    字符串表达式计算类

    描述中的“博文链接:https://hylong05.iteye.com/blog/560609”提供了一个具体的资源,虽然没有给出详细信息,但我们可以推测这是一个关于作者如何实现字符串表达式计算类的博客文章。在该博客中,作者可能分享了...

    Siliphen的表达式求值实践工程代码

    《Siliphen的表达式求值实践工程代码》是一个关于计算机科学中表达式求值的实践项目,这个项目深入探讨了如何在编程中实现表达式的计算。表达式求值是计算机科学的基础,尤其是在编译原理、解释器设计以及计算理论等...

    后缀表达式求值(c语言版)

    根据给定的文件信息,我们可以总结出以下关于“后缀表达式求值”的详细知识点,主要涉及C语言在数据结构中的应用,特别是栈的应用来解析和计算后缀表达式。 ### 1. 后缀表达式的概念 后缀表达式,也称为逆波兰表示...

    表达式求值.docx

    在给出的代码示例中,我们看到一个名为`Expression`的类,用于处理字符串形式的数学表达式,并计算其结果。该类的主要功能是解析输入的表达式,处理运算符优先级,最终得出计算结果。 `Expression`类包含以下几个...

    数据结构的表达式求值代码

    对于表达式,可以使用字符串或者自定义的表达式类来存储。表达式的求值可以通过重载运算符函数来完成。 5. **错误处理**:在实际的代码实现中,还需要考虑错误处理,例如非法字符、未闭合的括号、除以零等情况。...

    java算术表达式求值

    它提供了一个API,允许开发者将字符串形式的表达式转换为可执行的Java对象,然后进行求值。"jep-2.24.jar" 就是这个库的二进制文件,可以引入到Java项目中直接使用。 使用JEP库,开发者可以方便地处理如"2+3*4"这样...

    Java表达式求值2.0

    在Java编程语言中,表达式求值是一项基本且重要的任务,尤其在动态计算、脚本解析或编译器实现等领域。"Java表达式求值2.0"可能是指一个优化过的版本,用于更高效地处理Java中的数学或逻辑表达式。这个版本可能是...

    C++ 表达式求值(采用类模板写的)

    可能包括了表达式的解析,如将字符串形式的表达式转换为内部表示;运算符优先级的处理;以及使用栈进行运算符和操作数的管理。此外,还可能涉及到错误处理,比如处理未匹配的括号或其他语法错误。 总的来说,这个...

    数据结构 表达式求值

    ### 数据结构与表达式求值知识点解析 #### 一、问题背景及定义 在计算机科学领域,**表达式求值**是一项基础而重要的任务。它涉及到如何解析并计算由数字和运算符组成的数学表达式的值。例如,对于表达式 `3 * (9 ...

    表达式求值(C++程序)

    2. **解析**:解析是将输入的字符串表达式转化为内部可操作的数据结构的过程。在这个C++程序中,可能使用了语法分析技术,如递归下降解析或使用词法分析器(lexer)和解析器(parser)。 3. **操作符优先级和结合性...

    表达式求值源代码(逆波兰式)

    逆波兰表达式,又称后缀表达式,是一种数学表达式的表示方法,它将运算符放在操作数之后,以此简化表达式求值的过程。在逆波兰表达式中,不需要使用括号来表明运算的优先级,而是通过运算符的顺序来决定。这种表示法...

    字符串表达式校验&求值(C#实现)

    在IT领域,字符串表达式校验与求值是计算科学中的基本问题,广泛应用于各种编程语言,如C#。本文将深入探讨这个主题,重点在于C#实现。 首先,我们来理解“表达式求值”(Expression Evaluation)的概念。这是程序...

    解析字符串,按照运算表达式来计算出最终结果值.rar

    在解析字符串表达式时,需要理解这些运算符的语义和优先级规则。 4. **表达式树(Expression Trees)**: - C# 提供了 `System.Linq.Expressions` 命名空间,其中的表达式树类可以用来表示C#的lambda表达式。...

    c++表达式求值源代码

    对于后缀表达式的方法,`evaluate`函数会接收后缀表达式字符串,逐个处理字符,完成计算。 在实际编程中,还需要处理错误,例如无效的表达式、未匹配的括号等。可以使用异常处理机制来捕获并处理这些错误。此外,...

Global site tag (gtag.js) - Google Analytics