~~~~~~~~~~这样的字符串有没有办法进行统计~~~~~~~~~

phhui 2010-04-28 10:31:06
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份

哪位朋友会的帮忙一下,或提供点思路.
...全文
65 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yan267 2010-04-28
  • 打赏
  • 举报
回复


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份','份')







不过这样效率不高
修改一下昵称 2010-04-28
  • 打赏
  • 举报
回复
给你写了一个:

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;
}
}
lhlxls 2010-04-28
  • 打赏
  • 举报
回复
有规律,就是每一个菜的后面都跟一个N份,可以根据这个份来截取,但是我觉得很麻烦,关注ing...
手抓宝 2010-04-28
  • 打赏
  • 举报
回复
连个分隔符都没有。。。。不知道是怎么设计的。。。

如果格式固定(以:xxN份为标准格式)的话,还是可以做的,

大概思路:split("份"),分成一个字符串数组,然后用linq查询名称,提取数字部分,sum
修改一下昵称 2010-04-28
  • 打赏
  • 举报
回复
其实也有规律的。
lhlxls 2010-04-28
  • 打赏
  • 举报
回复
思路有点,感觉很麻烦,关注下吧
丰云 2010-04-28
  • 打赏
  • 举报
回复
我不是已经给你写了一个吗?
还问??
phhui 2010-04-28
  • 打赏
  • 举报
回复
谢谢各位的帮忙,根据三楼的提示,我自己实现了.
方法如下:
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]*", ""));
}
......
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧