在c#中怎么分离数字和运算符?

解决方案 »

  1.   

    去网上找个验证数字的正则表达式
    把你表达式用char [] 接收
    循环判断 
      

  2.   

    开源项目
    http://irony.codeplex.com/
    已经默认实现了一些基本表达式的解析(同时还包含C#,sql,javascript等语言的简单解析),如果你需要更复杂的可以自己定制他个token规则ps:实际上BNF范式配合antir,yacc也是一样可以解析的。
      

  3.   

     string a = "4-5151=5+4545";
                       char[] kk = a.ToCharArray();
                       string pa =@"[0-9]";                   for(int g=0;g<kk.Length;g++)
                       {
                           if (Regex.IsMatch(kk[g].ToString(), pa))
                           {
                              //数字
                           }
                           else
                           {
                               //非数字
                           }
                       }
      

  4.   

    还是说单纯的区分 数字 或是 运算符  ?若是计算的话 ,可以用c#的动态编译 ,若是区分数字或是运算符的话可以对字符进行判断
    下面这个是网上找的个动态编译的 ,大致就是这意思
    你可以看下 
    要用到C#的编译器、反射功能,自己瞧着去吧using System;
    using Microsoft.CSharp;
    using System.CodeDom.Compiler;
    using System.Reflection;public class Example
    {
        static void Main()
        {
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameter = new CompilerParameters();
            parameter.ReferencedAssemblies.Add("System.dll");
            parameter.GenerateExecutable = false;
            parameter.GenerateInMemory = true;        CompilerResults result = provider.CompileAssemblyFromSource(parameter, 
                CreateCode("256*56*(145+56.0*254/345)"));//将你的式子放在这里
            if (result.Errors.Count > 0)
            {
                Console.WriteLine("动态编译出错了!");
            }
            else
            {
                Assembly assembly = result.CompiledAssembly;
                Type AType = assembly.GetType("ANameSpace.AClass");
                MethodInfo method = AType.GetMethod("AFunc");
                Console.WriteLine(method.Invoke(null, null));
            }
            Console.Read();
        }
        static string CreateCode( string para)
        { 
            return "using System; namespace ANameSpace{static class AClass{public static object AFunc(){return "+para+";}}}";
        }
    }
      

  5.   

    如果是字符判断的话 
    int output = 0;
    bool isNumeric = int.TryParse(value, out output);如果是浮点型 也可以用double
      

  6.   

    解析公式
    http://topic.csdn.net/u/20100617/10/b7ca5dae-3ad9-4d1b-94a9-7aa14d85a8a6.html
      

  7.   

    for (int i = 0; i < textBox1.Text.Length; i++)
     {              
         try
         {
            int   zz = int.Parse(textBox1.Text[i].ToString());
            label5.Text += zz.ToString();
         }
         catch 
         {
            label5.Text += textBox1.Text[i].ToString();    
         }
     }
      

  8.   

    for (int i = 0; i < textBox1.Text.Length; i++)
     {              
         try
         {
            int   zz = int.Parse(textBox1.Text[i].ToString());
            label1.Text += zz.ToString();
         }
         catch 
         {
            label2.Text += textBox1.Text[i].ToString();    
         }
     }
      

  9.   

    3楼的string pa =@"[0-9]";这句是什么意思?
      

  10.   

    for (int i = 0; i < textBox1.Text.Length; i++)
     {   
      try
      {
      int zz = int.Parse(textBox1.Text[i].ToString());
      label1.Text += zz.ToString();
      }
      catch  
      {
      label2.Text += textBox1.Text[i].ToString();   
      }
     }这段代码跟把表达式里的运算符和数字分离有什么关系吗?
      

  11.   

    string a = "4-5151=5+4545";
      char[] kk = a.ToCharArray();
      string pa =@"[0-9]";  for(int g=0;g<kk.Length;g++)
      {
      if (Regex.IsMatch(kk[g].ToString(), pa))
      {
      //数字
      }
      else
      {
      //非数字
      }
      }这段代码是不是加什么头文件的,visual studio2005里发生错误
      

  12.   

    很明显 少了正则表达式的 命名空间  System.Text.RegularExpressions
      

  13.   

    string str = "1+2-3*4=10+99-21";
                String pattern = @"[^0-9]";
                Regex re = new Regex(pattern);
                Match m;
                StringBuilder builder = new StringBuilder();
                for (m = re.Match(str); m.Success; m = m.NextMatch())
                {
                    builder.Append(m.ToString());
                    str = str.Replace(m.ToString(), " ");
                }
                Console.Write(str);//1 2 3 4 10 99 21
                Console.WriteLine("");
                Console.Write(builder.ToString());//+-*=+-
                Console.Read();