技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 21536
|
本帖最后由 todaynew 于 2011-4-28 20:28 編輯
編寫自定義函數(shù)時,一般需要找到所需功能的核心算法,這個算法可先從一個特例開始進(jìn)行編寫。中心開花,逐步抽象,遞次外延,直到獲得滿足功能需求的完整代碼。下面以版友123xiaoniu同志昨日所問字符串排序問題為例,說明函數(shù)編寫的過程。
第一步 先做字符串第一位的排序,基本思路為:將第一位的字符順序向后逐個比較,取得最小值的字符,并將其排列到第一位。那么函數(shù)可寫為:
Function OrderStr(str As String) As String
Dim s As String
Dim j As Long
Dim n As Long
s = Mid(str, 1, 1)
For j = 1 To Len(str)
If Mid(str, j, 1) < s Then s = Mid(str, j, 1): n = j '計算最小值及其位置。
Next
str = s & Replace(str, s, "", 1, 1) '排序
OrderStr = str
End Function
第二步 做第一位到倒數(shù)第二位的循環(huán)比較排序。函數(shù)可寫為:
Function OrderStr(str As String) As String
Dim s As String
Dim i As Long, j As Long
Dim n As Long
For i = 1 To Len(str) - 1
s = Mid(str, i, 1)
For j = i + 1 To Len(str)
If Mid(str, j, 1) < s Then s = Mid(str, j, 1): n = j
Next
str = Mid(str, 1, i - 1) & s & Replace(str, s, "", i, 1)
Next
OrderStr = str
End Function
第三步 做可選擇順序和逆序的排序函數(shù)
Function OrderStr(str As String, B As Long) As String
'功能:字符串排序
'參數(shù):str--源字符串,B=1 降序 B=2 升序
Dim s As String
Dim i As Long, j As Long
Dim n As Long
For i = 1 To Len(str) - 1
s = Mid(str, i, 1)
For j = i + 1 To Len(str)
Select Case B
Case 1
If Mid(str, j, 1) < s Then s = Mid(str, j, 1): n = j
Case 2
If Mid(str, j, 1) > s Then s = Mid(str, j, 1): n = j
End Select
Next
str = Mid(str, 1, i - 1) & s & Replace(str, s, "", i, 1)
Next
OrderStr = str
End Function
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊
x
|