यहाँ एक तरह से यह करने के लिए है। यह कोड जावा में लिखा गया है। ध्यान दें कि यह अभी नकारात्मक संख्याओं को संभाल नहीं करता है, लेकिन आप इसे जोड़ सकते हैं।
public class ExpressionParser {
public double eval(String exp, Map<String, Double> vars){
int bracketCounter = 0;
int operatorIndex = -1;
for(int i=0; i<exp.length(); i++){
char c = exp.charAt(i);
if(c == '(') bracketCounter++;
else if(c == ')') bracketCounter--;
else if((c == '+' || c == '-') && bracketCounter == 0){
operatorIndex = i;
break;
}
else if((c == '*' || c == '/') && bracketCounter == 0 && operatorIndex < 0){
operatorIndex = i;
}
}
if(operatorIndex < 0){
exp = exp.trim();
if(exp.charAt(0) == '(' && exp.charAt(exp.length()-1) == ')')
return eval(exp.substring(1, exp.length()-1), vars);
else if(vars.containsKey(exp))
return vars.get(exp);
else
return Double.parseDouble(exp);
}
else{
switch(exp.charAt(operatorIndex)){
case '+':
return eval(exp.substring(0, operatorIndex), vars) + eval(exp.substring(operatorIndex+1), vars);
case '-':
return eval(exp.substring(0, operatorIndex), vars) - eval(exp.substring(operatorIndex+1), vars);
case '*':
return eval(exp.substring(0, operatorIndex), vars) * eval(exp.substring(operatorIndex+1), vars);
case '/':
return eval(exp.substring(0, operatorIndex), vars)/eval(exp.substring(operatorIndex+1), vars);
}
}
return 0;
}
}
आप java.util.Map आयात करने के लिए की जरूरत है।
ExpressionParser p = new ExpressionParser();
Map vars = new HashMap<String, Double>();
vars.put("x", 2.50);
System.out.println(p.eval(" 5 + 6 * x - 1", vars));
मैं यहाँ इस समस्या के लिए पूर्ण स्रोत तैनात: http://stackoverflow.com/questions/174664/operators-as-strings की [है –
संभव डुप्लिकेट
यहाँ कैसे मैं इस कोड का उपयोग है .NET में रनटाइम पर नए कोड को संकलित और निष्पादित करना संभव है?] (http://stackoverflow.com/questions/234217/is-it-possible-to-compile-and-execute-new-code-at-runtime- इन-नेट) – nawfal
संभावित डुप्लिकेट [क्या .NET में स्ट्रिंग गणित मूल्यांकनकर्ता है?] (http://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net) –