实现计算算式字符串的2种方式(方式2)

来源:互联网 发布:ubuntu 16.04 xampp 编辑:程序博客网 时间:2024/05/18 03:27

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace ConsoleApplication2{    class Program    {        static bool flag = true;        static string lastNumber = "";        static string Number = "";        static char Fuhao;        static int h;        static int k;        static void Main(string[] args)        {            //DataTable dt = new DataTable();            //Console.WriteLine(dt.Compute("3+3*8-6", ""));            //Console.Read();            string str = "125+568-567*95/81-6/958";            Console.WriteLine(show(str));            Console.Read();        }        static string show(string str)        {            for (int i = 0; i < str.Length; i++)            {                if (str[i] == '*')                {                    for (int j = i-1; j >= 0; j--)                    {                        if (char.IsNumber(str[j]) || str[j] == '.')                        {                            lastNumber =  str[j]+lastNumber ;                        }                        else if (str[j] == '+' || str[j] == '-' || str[j] == '*' || str[j] == '/')                        {                            h = j+1;                            j = -1;                        }                    }                    for (int j = i +1; j < str.Length+1; j++)                    {                        //要添加一位否则若最后一位是连乘检测不了                        if (j<str.Length&&(char.IsNumber(str[j])|| str[j]=='.'))                        {                            Number = Number + str[j];                        }                        if ((j < str.Length && (str[j] == '+'||str[j]=='-'||str[j]=='*'||str[j]=='/'))||j==str.Length)                        {                            k = j-1;                            j = str.Length;                        }                                           }                    double m = Convert.ToDouble(lastNumber) * Convert.ToDouble(Number);                    str = str.Remove(h, k - h+1);                    str = str.Insert(h, m.ToString());                    lastNumber = "";                    Number = "";                    return show(str);                }                if (str[i] == '/')                {                    for (int j = i - 1; j >= 0; j--)                    {                        if (char.IsNumber(str[j]))                        {                            lastNumber = str[j] + lastNumber;                        }                        else                        {                            h = j + 1;                            j = -1;                        }                    }                    for (int j = i + 1; j < str.Length + 1; j++)                    {                        //要添加一位否则若最后一位是连乘检测不了                        if (j < str.Length && char.IsNumber(str[j]))                        {                            Number = Number + str[j];                        }                        if ((j < str.Length && (str[j] == '+'||str[j]=='-'||str[j]=='*'||str[j]=='/')) || j == str.Length)                        {                            k = j - 1;                            j = str.Length;                        }                    }                    double m = Convert.ToDouble(lastNumber) / Convert.ToDouble(Number);                    str = str.Remove(h, k - h + 1);                    str = str.Insert(h, m.ToString());                    lastNumber = "";                    Number = "";                    return show(str);                }                          }            for (int j = 0; j < str.Length; j++)            {                if (flag == true)                {                    if (char.IsNumber(str[j]) || str[j]=='.')                    {                        lastNumber = lastNumber + str[j];                    }                    else if(str[j] == '+'||str[j]=='-'||str[j]=='*'||str[j]=='/')                    {                        Fuhao = str[j];                        flag = false;                    }                }                else                {                    if (char.IsNumber(str[j]) || str[j] == '.')                    {                        Number = Number + str[j];                    }                    else if (str[j] == '+' || str[j] == '-' || str[j] == '*' || str[j] == '/')                    {                        if (Fuhao == '+')                        {                            lastNumber = (int.Parse(lastNumber) + int.Parse(Number)).ToString();                            Number = "";                        }                        if (Fuhao == '-')                        {                            lastNumber = (int.Parse(lastNumber) - int.Parse(Number)).ToString();                            Number = "";                        }                        Fuhao = str[j];                    }                }                           }            //封顶的时候还得计算一次            if (Fuhao == '+')            {                lastNumber = (Convert.ToDouble(lastNumber) + Convert.ToDouble(Number)).ToString();                Number = "";            }            if (Fuhao == '-')            {                lastNumber = (Convert.ToDouble(lastNumber) - Convert.ToDouble(Number)).ToString();                Number = "";            }            return lastNumber;                   }    }}


原创粉丝点击