由于系统需要,将人员我分配比例以字符窜形式体现,即将组数据中数据体现在字符窜,生成字符窜已经解决,现在是怎样将字符窜反生成数组.
  private struct Emp  //一个自定义数据型
  {
     string Name"";  //人员名称
     decimal Rate;   //比率
  }
  
  Emp[] SetEmp=new Emp[3]  //定义一个Emp数组,假设为4维(根据用户选择)
  SetEmp[0].Name="张三";
  SetEmp[0].Rate=30;
  SetEmp[1].Name="李四";
  SetEmp[1].Rate=20;
  ..........
   
  根据数组生的维数生成字符窜;
  {[张三<30%>]:[李四<20%>]:[王五<10%>]:[杜七三<10%>]:[李四一<10>]}
  //以上都解决了
  现在是怎样把:
  {[张三<30%>]:[李四<20%>]:[王五<10%>]:[杜七三<10%>]:[李四一<10>]}
  转换到数组Emp,以便读取和计算.
  急!求各位大侠帮助,先谢了!
    

解决方案 »

  1.   

    using System;class Test
    {
        private struct Emp  //一个自定义数据型
        {
            public string Name;  //人员名称
            public decimal Rate;   //比率
        }    public static void Main()
        {
            string str = "{[张三<30%>]:[李四<20%>]:[王五<10%>]:[杜七三<10%>]:[李四一<10%>]}";
            str = str.Substring(1, str.Length - 2); //取了两段的大括号
            string[] strEmp = str.Split(':');        Emp[] e = new Emp[strEmp.Length];        for(int i = 0; i < strEmp.Length; i++)
            { 
                e[i].Name = strEmp[i].Substring(1, strEmp[i].IndexOf('<') - 1);
                e[i].Rate = Convert.ToDecimal(strEmp[i].Substring(strEmp[i].IndexOf('<') + 1, strEmp[i].IndexOf('>') - strEmp[i].IndexOf('<') - 3)) / 100;
            }        foreach (Emp eTemp in e)
            {
                Console.WriteLine(eTemp.Name + " " + eTemp.Rate);
            }
        }
    }
      

  2.   

    using System;
    using System.Text.RegularExpressions;class Test
    {
        private struct Emp  //一个自定义数据型
        {
            public string Name;  //人员名称
            public decimal Rate;   //比率
        }    public static void Main()
        {
            string str = "{[张三<30%>]:[李四<20%>]:[王五<10%>]:[杜七三<10%>]:[李四一<10%>]}";
            Emp[] e = new Emp[Regex.Matches(str, ":").Count+1];
            MatchCollection mc = Regex.Matches(str, @"\[(?<name>[^<]*)<(?<rate>\d+)%>\]");
            for(int i=0;i<mc.Count;i++)
            {
                e[i].Name = mc[i].Groups["name"].Value;
                e[i].Rate = Convert.ToDecimal(mc[i].Groups["rate"].Value);
            }        foreach (Emp eTemp in e)
            {
                Console.WriteLine(eTemp.Name + " " + eTemp.Rate);
            }
            Console.ReadLine();
        }
    }呵呵,我也试下。看楼主例子中Rate值是整数,楼上只要截取出来就行了,不用再转小数了
      

  3.   

    两位方法都能解决,谢谢了!给分:amandag 30分,lxcnn 20分