从C ++中的字符串计算算术表达式 [英] Evaluating arithmetic expressions from string in C++
本文介绍了从C ++中的字符串计算算术表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在寻找一个简单的方法来评估一个简单的数学表达式从字符串,如下:
I'm searching for a simple way to evaluate a simple math expression from an string, like this:
3 * 2 + 4 * 1 +(4 + 9)* 6
3*2+4*1+(4+9)*6
我只想要 +
和 *
操作加(
和)
*
的优先级高于 +
。
I just want +
and *
operations plus (
and )
signs. And *
has more priority than +
.
推荐答案
我想你正在寻找一个简单的递归下降解析器 。
I think you're looking for a simple recursive descent parser.
下面是一个非常简单的例子:
Here's a very simple example:
const char * expressionToParse = "3*2+4*1+(4+9)*6";
char peek()
{
return *expressionToParse;
}
char get()
{
return *expressionToParse++;
}
int expression();
int number()
{
int result = get() - '0';
while (peek() >= '0' && peek() <= '9')
{
result = 10*result + get() - '0';
}
return result;
}
int factor()
{
if (peek() >= '0' && peek() <= '9')
return number();
else if (peek() == '(')
{
get(); // '('
int result = expression();
get(); // ')'
return result;
}
else if (peek() == '-')
{
get();
return -factor();
}
return 0; // error
}
int term()
{
int result = factor();
while (peek() == '*' || peek() == '/')
if (get() == '*')
result *= factor();
else
result /= factor();
return result;
}
int expression()
{
int result = term();
while (peek() == '+' || peek() == '-')
if (get() == '+')
result += term();
else
result -= term();
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = expression();
return 0;
}
这篇关于从C ++中的字符串计算算术表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文