类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
如果ID=2004,则nextID=2004a;
如果ID=2004a,则nextID=2004b;
如果ID=2004b,则nextID=2004c;
…… ……
如果ID=2004z,则nextID=2004aa;
如果ID=2004aa,则nextID=2004ab;
…… ……
已知ID,求nextID。
ID 和nextID都是字符串,有没有好的算法或函数之类的?
谢谢。
网友回答:
Private Function NextID(ByVal ID As String) As String
select ID.length
case 4 如果是4位,肯定是2004
return "2004a"
case 5 ‘如果是5位,肯定是2004+某一字符
if ID.chars(4)="z" then ’如果是2004z,那么肯定返回2004aa
return "2004aa"
else ‘如果是2004+某一字符,那么返回2004+某一字符+1
return "2004"+chr(ASC(ID.chars(4))+1)
end if
case 6 ’如果是5位,肯定是2004+某两个字符
if ID="2004zz" then ‘如果是2004zz,原样返回,当然你也可以返回别的或是作错误处理
return ID
else if ID.chars(5)="z" then ’如果是2004+某字符+z,返回2004++a
return "2004"+chr(ASC(ID.chars(4)+1)+"a")
else ‘否则返回2004+某字符+
return "2004"+chr(ASC(ID.chars(4))+chr(ASC(ID.chars(5))+1)
End if
End select
End Function
未调试!思路基本如此!
假设你的编码规则是前面是纯数字,后面是纯小写字母:
Public Function GetNextID(ByVal strID As String)
Dim strNextID As String 返回值
strID = strID.Trim()
Dim strDecimal As String 编码的数字部分
Dim strChars As String 编码的字符部分
Dim reg As System.Text.RegularExpressions.Regex
strDecimal = reg.Replace(strID, "[a-z]*", "")
strChars = reg.Replace(strID, "\d*", "")
Dim b() As Byte
b = System.Text.Encoding.Default.GetBytes(strChars)
Dim i, len As Int32
len = b.Length
b(len - 1) += 1
Dim cFirst = "" 首位进位字符 (比如从"zz" 到 "aaa")
For i = len - 1 To 0 Step -1
If b(i) > Asc("z") Then
需要进位
b(i) = Asc("a")
If i > 0 Then
b(i - 1) += 1
Else
cFirst = "a"
End If
Else
不需要进位了
Exit For
End If
Next
strNextID = strDecimal & cFirst & System.Text.Encoding.Default.GetString(b)
Return strNextID
End Function