public string[] GetParamersData() { string equation = this.GetString(); int leftbraket = this.FindOp(0, '('); // int equalsign=this.FindOp(0,'='); int rightbraket = this.FindOp(leftbraket, ')'); string lefteq = FromToEnd(leftbraket, rightbraket); CalString leftfunc = new CalString(); leftfunc.SetString(lefteq); int[] split = leftfunc.FindOpOutOfBrackets(','); split = PushToHead <int>(split, -1); string[] strsplit = new string[20]; //保存分割后的字符串 for (int j = 0; j < split.Length - 1; j++) { strsplit[j] = leftfunc.FromToEnd(split[j], split[j + 1] - 1); } strsplit[split.Length - 1] = leftfunc.FromToEnd(split[split.Length - 1], leftfunc.GetLength() - 2); return(strsplit); }
public void GetCalString(CalString cn) //获取计算式 { strcal = cn; }
private int PutFuncToData(int i) { int k = 0; SortBlock2G sortblock2 = new SortBlock2G(); FuncName fn = new FuncName(); fn.SetFuncName(strFun); strFun = ""; if ((new Calculator()).CheckFunName(fn.GetFuncName())) { k = strcal.FindBrackets(i + 1); //只是简单的换个函数就可以实现多重嵌套函数了 if (k == -1) { SortBlock2G.error.ErrorMessage += "括号不成对\n"; errorMessage += "括号不成对\n"; this.Wrong = true; return(-1); } string stri = strcal.FromToEnd(i, k - 1); //此处应该提取一个专门把函数里面的参数弄出来的类或方法 CalString str = new CalString(stri); // int[] split = str.FindAllElements(new char[]{ ',' }); int[] split = str.FindOpOutOfBrackets(','); split = str.PushToHead <int>(split, -1); string[] strsplit = new string[20]; //保存分割后的字符串 for (int j = 0; j < split.Length - 1; j++) { strsplit[j] = str.FromToEnd(split[j], split[j + 1] - 1); } int count = 0; strsplit[split.Length - 1] = str.FromToEnd(split[split.Length - 1], str.GetLength() - 1); double[] res = new double[split.Length]; //保存结果 foreach (var element in strsplit) { // Console.WriteLine(element); if (element == null) { break; } CalString strpart = new CalString(element); SortBlock2G sortblock = new SortBlock2G(); sortblock.GetCalString(strpart); res[count] = sortblock.GetResult(); if (sortblock.Wrong) { sortblock2.Wrong = true; sortblock2.errorMessage += sortblock.errorMessage; } count++; } double resu = 0; resu = sortblock2.calculator.CalFunc(fn.GetFuncName(), res); if (sortblock2.Wrong || sortblock2.calculator.Wrong) { this.Wrong = true; errorMessage += sortblock2.errorMessage; } data[da] = new Data(); data[da].SetNum(resu); da++; } else { stackchop.message.ErrorMessage += "include unkown characters\n"; SortBlock2G.error.ErrorMessage += fn.GetFuncName().Length > 1 ? "Include UnKnown 字符串" : "Include UnKnown 字符"; errorMessage += fn.GetFuncName().Length > 1 ? "Include UnKnown 字符串\n" : "Include UnKnown 字符\n"; Wrong = true; //其实这句话可以不要,不要就可以 时间6+你好9=15 而不出错; return(i); } return(k); }
public static void Main(string[] args) { // Calculte cal=new Calculte (); // string str=cal.GetString (); // string strcal=cal .BackSort (str); // double result=cal .Calculator (strcal ); //------------------------------------------------------------------------------ //----------------------主程序--------------------------------------------------- // char op = '0'; // while (op != 'q') { // CalString cal = new CalString(""); // cal.UIGetString(); // // // // SortBlock2G sort = new SortBlock2G(); // sort.GetCalString(cal); // // double result = sort.GetResult(); // if (sort.IsError()) { // Console.WriteLine(sort.ShowInfo()); // } // Console.Write(cal.GetString() + "=" + result.ToString() + '\n' + "按q退出,其他键继续" + '\n'); // // SortBlock2G.error.ErrorMessage=""; // op = Console.ReadKey().KeyChar; // } //---------------------------------------------------------------------------------------------- // cos(sin(20+30-20)*20+50)*4/2^2+1/2+cos(sin(20+30-20)*20+50)*4/2^2+1/2 // pow(sin(30)*4,2) // SortBlock2 Release模式下用时32 // int i=cal.FindOp(0,'('); // int k=cal.FindBrackets(i); // string str=cal.FromToEnd(i,k); // Console.WriteLine(str); // 其实C#自带的就已经很屌了 Console.WriteLine(3+30*3*(3-4)); /** * 测试找括号 */ // char []opts={'(',')' }; // string str="(1+2)+1*(2+3)"; // CalString scal=new CalString(str); // int [] ars=scal.FindAllElements(scal.FindOps,opts); // foreach (int element in ars) { // Console.WriteLine(element); // } /* * 测试逗号查找 */ // char []opts={','}; // string str="pow(1,1,2,3)"; // CalString scal=new CalString(str); // int [] ars=scal.FindAllElements(opts); // foreach (int element in ars) { // Console.WriteLine(element); // } // Console.WriteLine(Math.Log(Math.E)); /* * 测试FuncName的FindFunName方法 */ // Console.WriteLine(FuncName.FindName("cos")); // Console.WriteLine(FuncName.CheckFun("cos",1)); //测试FindOp // int c=scal.FindOp(0,opts); // Console.WriteLine(c); // 测试时间 //不改730多 //加一个方法 改成NoGetResult 740多 //用Paraller 1300多 //Paraller 干for循环只要410多 // char op = '0'; // while (op != 'q') { // CalString cal = new CalString(""); // cal.UIGetString(); // Stopwatch sw=new Stopwatch(); // sw.Start(); // // // double result=0; // for(int i=0;i<10000;i++) // { // sort = new SortBlock2(); // sort.GetCalString(cal); // // result = sort.NoGetResult(); // } // // Parallel.For( 0,10000,(i)=> // { // SortBlock2 sort= new SortBlock2(); // sort.GetCalString(cal); // // result = sort.NoGetResult(); // }); // if (sort.IsError()) { // Console.WriteLine(sort.ShowInfo()); // } // Console.Write(cal.GetString() + "=" + result.ToString() + '\n' + "按q退出,其他键继续" + '\n'); // sw.Stop(); // long time=sw.ElapsedMilliseconds; // Console.WriteLine(time); // op = Console.ReadKey().KeyChar; // } // // 测试查找字符串 《测试通过》 while (true) { CalString cs = new CalString(); cs.UIGetString(); string st = Console.ReadLine(); Console.WriteLine(cs.FindString(0, st)); // cs.SetString("fx(1,2)"); // int []result=cs.FindAllString("caos"); // foreach (var element in result) { // Console.WriteLine(element); } // cs.UIGetString(); // cs.SetString(cs.ReplaceAllEks("000",result,4)); // Console.WriteLine(cs.GetString()); // string []strr=cs.GetParamersData(); // string []strr=cs.FindUnKnown(); // foreach (var element in strr) { // Console.WriteLine(element); // } //} Console.ReadKey(); }
public void SetCalString(string str) { calstr = new CalString(str); }
public void SetCalString(string strcal) { cal = new CalString(strcal); }
private int PutFuncToData(int i) { //stackchop.Pop();//在这里Pop一下就好了。。尽量不要这样 //1.2.3修改一下就已经不用了,哈哈 int k = 0; SortBlock2 sortblock2 = new SortBlock2(); FuncName fn = new FuncName(); fn.SetFuncName(strFun); strFun = ""; if ((new Calculator()).CheckFunName(fn.GetFuncName())) { // k=strcal.FindOp(i,')'); k = strcal.FindBrackets(i + 1); //只是简单的换个函数就可以实现多重嵌套函数了 // Console.WriteLine("i={0} k={1}",i,k); if (k == -1) { SortBlock2.error.ErrorMessage += "括号不成对\n"; SortBlock2.Wrong = true; return(-1); } string stri = strcal.FromToEnd(i, k - 1); CalString str = new CalString(stri); int[] split = str.FindAllElements(new char[] { ',' }); // if (split.Length!=0) { split = str.PushToHead <int>(split, -1); string [] strsplit = new string[20]; //保存分割后的字符串 for (int j = 0; j < split.Length - 1; j++) { strsplit[j] = str.FromToEnd(split[j], split[j + 1] - 1); } int count = 0; strsplit[split.Length - 1] = str.FromToEnd(split[split.Length - 1], str.GetLength() - 1); double [] res = new double[split.Length]; //保存结果 foreach (var element in strsplit) { if (element == null) { break; } CalString strpart = new CalString(element); SortBlock2 sortblock = new SortBlock2(); sortblock.GetCalString(strpart); res[count] = sortblock.GetResult(); // FuncName.InnerSetString(); count++; } double resu = 0; resu = sortblock2.calculator.CalFunc(fn.GetFuncName(), res); //pow(1+2*3+4,5-5+6,8,96,9-5,55) // string str1=str.FromToEnd(-1,split-1); // string str2=str.FromToEnd(split,str.GetLength()-1); // Console.WriteLine(str1+" "+str2); // }//if 逗号存在 结束 // sortblock2.GetCalString(str); // double re=sortblock2.GetResult(); // // // re=sortblock2.calculator.CalFunc(FuncName.GetFunc(),re); //PutNumToData(); data[da] = new Data(); data[da].SetNum(resu); da++; } else { stackchop.message.ErrorMessage += "include unkown characters\n"; Wrong = true; //其实这句话可以不要,不要就可以 时间6+你好9=15 而不出错; return(i); } return(k); }