各位大侠,这是我写的第一个程序,关于计算输入表达式的算法,有些错误不知从何小手,请各位大侠能够帮忙改一下,在此谢过了..
using System;
using System.Collections.Generic;
using System.Text;
namespace math
{
class Program
{
public int i,j;
static void Main(string[] args)
{
string str=Console .ReadLine ();
// static string strmath(string str)
// {
int len =str.Length;
int on =1;
string[] str1 = new string[100];
string s1;
if (str.Substring (len-1,1)=="=")
{
for (int i=0;i<=len ;i++)
{
s1 = str.Substring(0, 1);
if (s1=="*" || s1=="/" || s1=="%")
{
Console .WriteLine ("第一个字符只能是数字或者函数,请重新输入!");
Console .ReadLine ();
}
if (s1=="+" || s1=="-" )
{
str[j++]=s1;
}
if (s1=="s" || s1=="c" || s1=="l" || s1=="t" || s1=="e" )
{
str[j++]= sanjiao(str.Substring (i));
}
if(int.Parse (s1)<=9 && int.Parse (s1)>=0)
{
str[j++]= shuzi(str.Substring (i));
}
if (s1=="(")
{
str[j++]=s1;
i++;
if (str.Substring (i,1)=="*" || str.Substring (i,1)=="/" || s1=="%")
{
Console .WriteLine ("第一个字符只能是数字或者函数,请重新输入!");
Console .ReadLine ();
}
if (str.Substring (i,1)=="+" || str.Substring (i,1)=="-" )
{
str[j++]=str.Substring (i,1);
}
if (str.Substring (i,1)=="s" || str.Substring (i,1)=="c" || str.Substring (i,1)=="l" || str.Substring (i,1)=="t" || str.Substring (i,1)=="e" )
{
str[j++]=sanjiao(str.Substring (i));
}
if(int.Parse (s1)<=9 &&int.Parse(s1)>=0)
{
str[j++]= shuzi(str.Substring (i));
}
}
}
Console.WriteLine(exception (str[],j));
}
}
static string shuzi()
{
int p=1;
for (i<=len;i++)
{
s1 = str.Substring(0, 1);
if (on==1 && (s1=="*" || s1=="/" ||s1=="+" || s1 =="-" || s1=="%" ))
{
on--;
str[j++]=s1;;
}
if (on==0 && (str.Substring (0,1)=="s" || str.Substring (0,1)=="c" || str.Substring (0,1)=="l" || str.Substring (0,1)=="t" ))
{
Console .WriteLine ("输入格式有误,请重新输入!");
Console .ReadLine ();
}
if(on ==0 && (s1<=58 && s1>=48) )
{
p++;
str[j++]=str.Substring (0,p);
}
//str1[j]=str.Substring (0,i);
return str.Substring (i);
}
}
static string sanjiao(string str)
{
if (str.Substring(0, 3) == "sin" || str.Substring(0, 3) == "cos" || str.Substring(0, 3) == "ctg")
{
i = i + 2;
}
if (str.Substring(0, 4) == "sqrt")
{
i = i + 3;
}
if (str.Substring(0, 2) == "lg")
{
i = i + 1;
}
if (str.Substring(i + 1, 1) == "(")
{
int k = 1;
for (int q = 0; q < len; q++)
{
if (str.Substring(i, 1) == "(")
{
k = k + 1;
}
if (str.Substring(i, 1) == ")")
{
k = k - 1;
}
if (k == 0)
{
// str[j++]=str.Substring (0,q);
//break;
}
}
return str.Substring(i);
}
}
static string exception(string[] str, int len1)
{
int k = 0;
for (int t = 0;t< len1; t++)
{
if (str[i] == "(")
{
k = k + 1;
}
if (str[i] == ")")
{
k = k - 1;
}
if (k == 0)
{
return exception(str, t);
for (int u = 0; u< t; u++)
{
if (str[u] == "*")
{
int.Parse(str[u - 1]) = int.Parse(str[u - 1]) * int.Parse(str[u]);
}
if (str[u] == "/")
{
int.Parse(str[u - 1]) = int.Parse(str[u - 1]) / int.Parse(str[u]);
}
if (str[u] == "%")
{
int.Parse(str[u - 1]) = int.Parse(str[u - 1]) % int.Parse(str[u]);
}
}
for (int y = 0; y< t;y++)
{
if (str[y] == "+")
{
int.Parse(str[y - 1]) = int.Parse(str[y - 1]) + int.Parse(str[y]);
}
if (str[y] == "-")
{
int.Parse(str[y - 1]) = int.Parse(str[y- 1]) - int.Parse(str[y]);
}
}
return Convert.ToString(str[j]);
}
}
}
}
}