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位数字)个数是不固定的,也许多也许少。 展开
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位数字)个数是不固定的,也许多也许少。 展开
7个回答
展开全部
以前写过一个差不多的几个函数..修改了一下.应该可以完美解决你的问题
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
%>
要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。
·
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
%>
要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。
·
展开全部
顶 剑江帝国,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的).
按楼主的要求有的地方要腊茄改动/
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的).
参考资料: 剑江帝国
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果字符串A是固定的,可以将字符串用此敬split函数进行分段,把每一段的值放到数组森兆慎里面,猜伍相同的就+1,最后将数组里的每个值进行比较,按条件就行输出即可.如果字符串中A不是固定的那就难搞了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就利用split,把A当作分割符,分割完成后再把A加在每个元素前面就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
顶“猫那个咪”,大体思路应该这样的,具体算法没想好~·主要是比较数组元素。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询