private string Cal_shuxuebiaodashi(string shuxuebiadashi)
{
string math_str = shuxuebiadashi;
int math_str_len = math_str.Length;
//MessageBox.Show(shuxuebiadashi);//检查数学表达式是否传进来
//MessageBox.Show(math_str_len.ToString());
//先对乘法和除法进行计算
for(int i = 1;i < math_str_len - 1;i++)
{
if(math_str[i] == '*' || math_str[i] == '/')
{
string num_hou = "";//记录运算符后面的数字
int zuihou = 0;//记录num_hou最后一个数字对应的index
//找num_hou
for (int j = i + 1; j < math_str_len; j++)
{
if (j == math_str_len - 1)
{
zuihou = math_str_len - 1;
for (int k = i + 1; k <= zuihou; k++)
{
num_hou += math_str[k];
}
break;
}
else if (math_str[j] == '*' || math_str[j] == '/' || math_str[j] == '+' || math_str[j] == '-')
{
zuihou = j - 1;
for (int k = i + 1; k <= zuihou; k++)
{
num_hou += math_str[k];
}
break;
}
}
string num_qian = "";//记录运算符后面的数字
int zuiqian = 0;//记录num_qian第一个数字对应的index
//找num_qian
for (int j = i - 1; j >= 0; j--)
{
if (j == 0)
{
zuiqian = 0;
for (int k = zuiqian; k <= i - 1; k++)
{
num_qian += math_str[k];
}
break;
}
else if (math_str[j] == '*' || math_str[j] == '/' || math_str[j] == '+' || math_str[j] == '-')
{
zuiqian = j + 1;
for (int k = zuiqian; k <= i - 1; k++)
{
num_qian += math_str[k];
}
break;
}
}
//把num_qian* num_hou或num_qian/ num_hou删掉换成qianhou
string qianhou = "";
if (math_str[i] == '*')
{ qianhou = (float.Parse(num_qian) * float.Parse(num_hou)).ToString(); }
if (math_str[i] == '/' && float.Parse(num_hou) != 0)
{ qianhou = (float.Parse(num_qian) / float.Parse(num_hou)).ToString(); }
else if (math_str[i] == '/' && float.Parse(num_hou) == 0)
{ MessageBox.Show("您的除数不能为0!"); }
math_str = math_str.Insert(zuiqian, qianhou);
math_str = math_str.Remove(zuiqian+qianhou.Length, zuihou - zuiqian+1);
math_str_len = math_str_len - (zuihou - zuiqian+1) + qianhou.Length;
i = zuiqian + qianhou.Length - 1;//下次循环得从新的数的下一个字符开始;
}
}
//然后对加法和减法进行计算
for (int i = 1; i < math_str_len - 1; i++)
{
if (math_str[i] == '+' || math_str[i] == '-')
{
string num_hou = "";//记录运算符后面的数字
int zuihou = 0;//记录num_hou最后一个数字对应的index
//找num_hou
for (int j = i + 1; j < math_str_len; j++)
{
if (j == math_str_len - 1)
{
zuihou = math_str_len - 1;
for (int k = i + 1; k <= zuihou; k++)
{
num_hou += math_str[k];
}
break;
}
else if (math_str[j] == '+' || math_str[j] == '-')
{
zuihou = j - 1;
for (int k = i + 1; k <= zuihou; k++)
{
num_hou += math_str[k];
}
break;
}
}
string num_qian = "";//记录运算符后面的数字
int zuiqian = 0;//记录num_qian第一个数字对应的index
//找num_qian
for (int j = i - 1; j >= 0; j--)
{
if (j == 0)
{
zuiqian = 0;
for (int k = zuiqian; k <= i - 1; k++)
{
num_qian += math_str[k];
}
break;
}
else if (math_str[j] == '+' || math_str[j] == '-')
{
zuiqian = j + 1;
for (int k = zuiqian; k <= i - 1; k++)
{
num_qian += math_str[k];
}
break;
}
}
//把num_qian* num_hou或num_qian/ num_hou删掉换成qianhou
string qianhou = "";
if (math_str[i] == '+')
{ qianhou = (float.Parse(num_qian) + float.Parse(num_hou)).ToString(); }
if (math_str[i] == '-')
{ qianhou = (float.Parse(num_qian) - float.Parse(num_hou)).ToString(); }
math_str = math_str.Insert(zuiqian, qianhou);
math_str = math_str.Remove(zuiqian + qianhou.Length, zuihou - zuiqian + 1);
math_str_len = math_str_len - (zuihou - zuiqian + 1) + qianhou.Length;
i = zuiqian + qianhou.Length - 1;//下次循环得从新的数的下一个字符开始;
}
}
//MessageBox.Show(math_str);
return math_str;
}
进行不带括号的数学表达式(字符串类型)进行计算
最新推荐文章于 2023-04-03 19:57:16 发布