键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价。
例:输入表达式 应输出表达式
a+(b+c) a+b+c
(a*b)+c/d a*b+c/d
a+b/(c-d) a+b/(c-d)
注意输入a+b时不能输出b+a。
表达式以字符串输入,长度不超过255。输入不要判错。
所有变量为单个小写字母。只是要求去掉所有多余括号,不要求对表达式化简。
程序如下:
public class PrintString{
private static boolean before = false;
private static void printString(String str){
String temp = "";
for(int i = 0; i < str.length();i++){
if(i == 0){
before = false;
}
else{
if((str.charAt(i - 1) == '*') || (str.charAt(i - 1) == '/')){
before = true;
}else{
before = false;
}
}
if(str.charAt(i) == '('){
temp = getString(str.substring(i));
if(i == 0){
str = temp;
}else{
str = str.substring(0, i) + temp;
}
}
}
System.out.println(str);
}
private static String getString(String str){
String result = str;
String temp = "";
int i = 0;
int itemp = 0;
int len = 0;
boolean add*** = false;
for(i = 1; i < str.length(); ){
if((str.charAt(i) == '+') || (str.charAt(i) == '-')){
add*** = true;
}
if(str.charAt(i) == '(')
{
temp = getString(str.substring(i));
len = temp.length() + str.substring(0, i).length();
str = str.substring(0, i) + temp;
if(len != result.length()){
if(i > 1){
i--;
}
}else{
i = str.indexOf(")", i) + 1;
}
result = str;
continue;
}
if(str.charAt(i) == ')')
{
break;
}
i++;
}
result = str;
if(before == true){
return result;
}
if(add*** == false){
if( (i + 1) < str.length() ){
str = str.substring(1);
temp = str;
result = str.substring(0, i - 1) + temp.substring(i);
} else if((i + 1) == str.length()){
str = str.substring(1);
temp = str;
result = str.substring(0, i - 1) + temp.substring(i);
}
}else{
if( (i + 1) < str.length() ){
if(( str.charAt(i + 1) != '*' ) && (str.charAt(i + 1) != '/')){
str = str.substring(1);
temp = str;
result = str.substring(0, i - 1) + temp.substring(i);
}
} else if((i + 1) == str.length()){
str = str.substring(1);
temp = str;
result = str.substring(0, i - 1) + temp.substring(i);
}
}
return result;
}
public static void main(String[] args){
String msg1="a+(b+c)";
String msg2="(a*b)+c/d";
String msg3="a+b/(c-d)";
String msg4="((1+2*5)+(2+4)*5)-(3+4)*8+1";
System.out.println("input:");
System.out.println(msg1);
System.out.println(msg2);
System.out.println(msg3);
System.out.println(msg4);
System.out.println("output:");
printString(msg1);
printString(msg2);
printString(msg3);
printString(msg4);
}
}
结果如下:
input:
a+(b+c)
(a*b)+c/d
a+b/(c-d)
((1+2*5)+(2+4)*5)-(3+4)*8+1
output:
a+b+c
a*b+c/d
a+b/c-d
1+2*5+(2+4)*5-(3+4)*8+1
最后修改于 2006-08-04 10:15
阅读(?)评论(0)