string a="酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份";如何统计出字符串a中各种菜的总份数.
即:
酢醬共N份
豇豆共N份
鑲肉共N份
牛腱共N份
肴肉共N份哪位朋友会的帮忙一下,或提供点思路.

解决方案 »

  1.   

    连个分隔符都没有。不知道是怎么设计的如果格式固定(以:xxN份为标准格式)的话,还是可以做的,大概思路:split("份"),分成一个字符串数组,然后用linq查询名称,提取数字部分,sum
      

  2.   

    有规律,就是每一个菜的后面都跟一个N份,可以根据这个份来截取,但是我觉得很麻烦,关注ing...
      

  3.   

    给你写了一个:public string GetStr(string a)
            {
                a = a.Replace("份", "");
                string temp = "";
                Dictionary<string, int> dic = new Dictionary<string, int>();
                for (int i = 0; i < a.Length; i++)
                {
                    string b = a.Substring(i, 1);
                    if (!IsNum(b))
                    {
                        temp += b;
                    }
                    else
                    {
                        if (dic.ContainsKey(temp))
                        {
                            int value = (int)dic[temp];
                            dic[temp] = value + Int32.Parse(b);
                        }
                        else
                        {
                            dic.Add(temp, Int32.Parse(b));
                        }
                        temp = "";
                    }
                }            string re = "";
                foreach (object var in dic.Keys)
                {
                    re += var.ToString() + ":" + dic[var.ToString()] + "份";
                }            return re;
            }        public bool IsNum(string str)
            {
                int a = 0;
                try
                {
                    a = Convert.ToInt32(str);
                    return true;
                }
                catch (Exception)
                {
                    return false;  
                }
            }
      

  4.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go-- =============================================
    -- Author: <zhoulizuo>
    -- Create date: <2008-9-12>
    -- Description: <功能:实现split功能的函数:删除时,传递的参数是多个要删除的主键 >
    -- =============================================
    alter   function   [dbo].[PrimaryKey_split]     
      (   
      @inputstr   varchar(8000),     
      @seprator   nvarchar(10)   
      )   
      returns   @temp   table   (Pri_Key   nvarchar(200),number nvarchar(20))   
      as     
      begin 
      declare @num varchar(1000)
      declare   @i   int 
      declare @EveryKeyLen int--每个主键的长度
      --每个主键的长度
      declare @EveryKeyValue nvarchar(200) 
      declare @str varchar(1000)
      declare @size int
      set   @inputstr   =   rtrim(ltrim(@inputstr))   
      set   @i   =   charindex(@seprator,   @inputstr)   
      
      while   @i   >=   1   
      begin  
        set @EveryKeyValue =left(@inputstr, @i -1)
        if(len(@EveryKeyValue)>0)
          set @str=@EveryKeyValue
          set @num=''
          set @size=0
          while len(@str)!=@size
    begin 
    set @size=len(@str)
    set @num=@num+substring(@str,patindex('%[0-9]%',@str),1)
    set @str=right(@str,len(@str)-patindex('%[0-9]%',@str))
    end
    set @EveryKeyValue=replace(@EveryKeyValue,@num,'')
          insert   @temp(Pri_Key,number)   values(@EveryKeyValue,@num)   
        
        set   @inputstr   =   substring(@inputstr,@i+1, len(@inputstr) - @i)   
        set   @i   =   charindex(@seprator,   @inputstr)   
      end   
        
      if   @inputstr   <>   '\' and len(@inputstr)>0  
          set @str=@inputstr
          set @num=''
          set @size=0
          while len(@str)!=@size
    begin 
    set @size=len(@str)
    set @num=@num+substring(@str,patindex('%[0-9]%',@str),1)
    set @str=right(@str,len(@str)-patindex('%[0-9]%',@str))
    end
    set @inputstr=replace(@inputstr,@num,'')
     insert   @temp(Pri_Key,number)   values(@inputstr,@num)   
        
      return     
      end  --调用   
      --select   *   from     PrimaryKey_split ('酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份','份')     不过这样效率不高
      

  5.   

    谢谢各位的帮忙,根据三楼的提示,我自己实现了.
    方法如下:
    string a="酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份酢醬1份豇豆2份鑲肉3份牛腱4份肴肉5份";int c1=0,c2=0,c3=0,c4=0,c5=0;//五个菜的总数
    string[] str=a.Split('份');
    for(int i=0;i<str.length;i++)
    {
        if(str[i].Contains("酢醬"))
                {
                    c1 += Convert.ToInt32(System.Text.RegularExpressions.Regex.Replace(str[i].ToString(), @"[^\d]*", ""));
                }
    ......
    }