请问:何把字符串转换成数学表达式?如 String s="20+30-10"转成20+30-10;主要是字符串中的"+"-"变成数学表达式的+-?
请问:何把字符串转换成数学表达式?如 String s= "20+30-10 "转成20+30-10;主要是字符串中的 "+ "- "变成数学表达式的+-?
[解决办法]
//
//计算整数四则运算, 不包含括号. by cczlp
int CalcInt(AnsiString Str)
{
char opc[4] = { '+ ', '- ', '* ', '/ '};
int Ret = 0;
int op[100];
int Num[100];
int LastPos = 1;
int OpNum = 0;
int i, j;
AnsiString as;
//去掉空格
for (i = 1; i <= Str.Length(); i++)
{
if (Str[i] != ' ')
{
as = as + AnsiString(Str[i]);
}
}
//取数字和运算符
for (i = 1; i <= as.Length(); i++)
{
for (int j = 0; j < 4; j++)
{
if (as[i] == opc[j])
{
Num[OpNum] = as.SubString(LastPos, i - LastPos).ToInt();
op[OpNum++] = opc[j];
LastPos = i + 1;
break;
}
}
}
Num[OpNum] = as.SubString(LastPos, as.Length() - LastPos + 1).ToInt();
//先计算乘除
for (i = 0; i < OpNum; i++)
{
if (op[i] == '* ' || op[i] == '/ ')
{
Ret = op[i] == '* ' ? Num[i] * Num[i + 1] : Num[i] / Num[i + 1];
memmove(&Num[i], &Num[i+1], (99 - i) * sizeof(int));
Num[i] = Ret;
memmove(&op[i], &op[i+1], (99 - i) * sizeof(int));
OpNum--;
i--;
}
}
//后计算加减
bool bFirst = true;
for (i = 0; i < OpNum; i++)
{
if (op[i] == '+ ' || op[i] == '- ')
{
if (bFirst)
{
bFirst = false;
Ret = Num[i];
}
Ret = op[i] == '+ ' ? Ret + Num[i + 1] : Ret - Num[i + 1];
}
}
return Ret;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = "20 +30/7*10 - 2 " ;
int a = CalcInt(s);
ShowMessage(a);
}