ASP以一个字符串中字符重复次数以多到少排列

比如字符串=A1A3A8A9A3A4A4A5A4A5A3A9A5A6A1A7A5A2A7A9A7A8A6A9A9A0A6A0A5A0A1重复了2次,A2重复了1次,A3重... 比如字符串=A1A3A8A9A3A4A4A5A4A5A3A9A5A6A1A7A5A2A7A9A7A8A6A9A9A0A6A0A5A0
A1重复了2次,A2重复了1次,A3重复了3次,A4重复了3次,A5重复了5次,A6重复了3次,A7重复了3次,A8重复了2次,A9重复了5次,A0重复了3次。
排除重复次数小于3的字符以多到少排列输出,重复次数相同的以字符名以大到小排列
输出:
A9
A5
A7
A6
A4
A3
希望高手给出一个效率高的算法。
A是固定的,但是数字并不是1位数字,数字是16位数字,并且没有一定的顺序(但都是16位的数字)。比如A2569865359547856A6563458756325457并且字符串A(16位数字)个数是不固定的,也许多也许少。
展开
 我来答
百度网友7c77daf
2008-08-09 · TA获得超过1603个赞
知道大有可为答主
回答量:744
采纳率:100%
帮助的人:839万
展开全部
以前写过一个差不多的几个函数..修改了一下.应该可以完美解决你的问题

asp代码:

<%
'输入str:要统计的字符串,d要统计子字符串的前导字符串
'返回一个肢喊有两个数字符串数组,r(0)为不重颤让复的以"|"分割的字符串,如"A0|A1|A2",r(1)为r(0)对应的个数"5|1|3"分茄饥局别代表A0为5次,A1为1次,A2为3次.
'注意:输入str必须以输入d开头
Function countStr(byval str,byval d)
if instr(str,d)<>1 then exit function
str=str&d
Dim strA,i,r(2)
strA=Split(str,d)
for i = 1 To Ubound(strA)-1
if instr(r(0)&"|","|"&d&strA(i)&"|")=0 then
r(0)=r(0)&"|"&d&strA(i)
r(1)=r(1)&"|"&countStrx(str,d&strA(i)&d)
end if
next
r(0)=mid(r(0),2)
r(1)=mid(r(1),2)
countStr=r
End Function

'统计字子字符串在父字符串中出现的次数.
Function countStrx(byref str,byref substr)
dim p:p=0:countStrx=-1
do
countStrx=countStrx+1
p=instr(p+1,str,substr)
loop while p>0
End Function

'给出现次数排序.获得排序索引数组
Function getStort(byval a)
dim i,j,t,b()
redim b(ubound(a))
For i = 0 To ubound(a): b(i)=i : next
For i = 0 To ubound(a)
For j = ubound(a) To i+1 Step -1
if a(i)<a(j) then t = a(i): a(i) = a(j): a(j) = t :t = b(i): b(i) = b(j): b(j) = t
Next
Next
getstort=b
End Function

dim T,A,B,C,i,SI
T=countStr("A123456AaAbAcAaAbA123456A1A3A8A9A3A4A4A5A4A5A3A9A5A6A1A7A5A2A7A9A7A8A6A9A9A0A6A0A5A0","A")
A=split(T(0),"|")
B=split(T(1),"|")
C=getStort(B)
for i=0 to ubound(C)
SI=SI&i+1&"."&A(c(i))&","&B(c(i))&" <br>"&VBcrlf
next

Response.write si

%>

要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。

·
feil3j
2008-08-13 · TA获得超过471个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:150万
展开全部
顶 剑江帝国,replace有得好啊。
按楼主的要求有的地方要腊茄改动/
A字符串不定,但A后面的数字是固定的,若是从后面(数字)截取,就可以了.即从后面取子串,再从前面截轮唤察取.新增函数 position()
strDesc="A2569865359547856Asd6563458756325457Ac6563458756325451Asd6563458756325457Ac6563458756325451Asd6563458756325457A6563458756325422"
strDesc=strDesc & strDesc &strDesc //strDesc变链敏得多些

function position(str) //得到最后一个带A的子串.
len_str=len(str)
A_position=instrRev(str,"A")
position=len_str-A_position+1
end function
在function NumCount(byval str) 中改变两条语句:
substr=left(str,17) ==>substr=right(str,position(str))
下面同上(只要用left的).

参考资料: 剑江帝国

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猫那个咪
2008-07-28
知道答主
回答量:63
采纳率:0%
帮助的人:0
展开全部
如果字符串A是固定的,可以将字符串用此敬split函数进行分段,把每一段的值放到数组森兆慎里面,猜伍相同的就+1,最后将数组里的每个值进行比较,按条件就行输出即可.如果字符串中A不是固定的那就难搞了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2db262e5f
2008-07-30 · TA获得超过1496个赞
知道大有可为答主
回答量:1814
采纳率:0%
帮助的人:1440万
展开全部
就利用split,把A当作分割符,分割完成后再把A加在每个元素前面就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dou_8379
2008-07-29 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:31.6万
展开全部
顶“猫那个咪”,大体思路应该这样的,具体算法没想好~·主要是比较数组元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式