【悬赏】20分送给第一个完美解决的朋友:关于字符串的处理

奋斗一生的程序员 2006-01-16 07:03:38
功能要求:写出一个函数 Function OutputStr(InputStr AS String) AS String
输入参数:InputStr = "5,6,11,30,42,31,7,8,35"
输出: OutputStr= "5-8,11,30-31,35,42"

即:OutputStr("5,6,11,30,42,31,7,8,35") = "5-8,11,30-31,35,42"

实现说明:
InputStr每个数之间用逗号分隔。需要将这些数进行排序,另外,连续的数字要用连接符连接,使字符串更简化些。

第一个按照要求写出此函数,并能准确无误实现需求的,送30分。谢谢。
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
支持问题 -》 技术问题
  • 打赏
  • 举报
回复
不是作业题,是我做的项目中遇到的一个支持问题。
我现在老了,思维不如年轻那样敏捷,所以,帖到这里,让大家练练笔。
答案正确就给分。

恭喜 jadeluo(秀峰) 送你全分!
vansoft 2006-01-16
  • 打赏
  • 举报
回复
作业题啊。
jadeluo 2006-01-16
  • 打赏
  • 举报
回复
Option Explicit

Private Function OutputStr(InputStr As String) As String
Dim sSplit() As String, iSplit() As Integer
Dim iLoop As Integer, iLoop1 As Integer, iTemp As Integer
Dim iFrom As Integer, iTo As Integer
Dim sResult As String
sSplit = Split(InputStr, ",")
ReDim iSplit(UBound(sSplit))
For iLoop = LBound(sSplit) To UBound(sSplit)
iSplit(iLoop) = Val(sSplit(iLoop))
Next iLoop
For iLoop = LBound(sSplit) To UBound(iSplit) - 1
For iLoop1 = iLoop + 1 To UBound(iSplit)
If iSplit(iLoop) > iSplit(iLoop1) Then
iTemp = iSplit(iLoop)
iSplit(iLoop) = iSplit(iLoop1)
iSplit(iLoop1) = iTemp
End If
Next iLoop1
Next iLoop
iFrom = iSplit(LBound(sSplit))
iTo = iFrom
For iLoop = LBound(sSplit) + 1 To UBound(iSplit)
If iSplit(iLoop) - iTo = 1 Then
iTo = iSplit(iLoop)
Else
If sResult <> "" Then sResult = sResult & ","
If iFrom = iTo Then
sResult = sResult & iFrom
Else
sResult = sResult & iFrom & "-" & iTo
End If
iFrom = iSplit(iLoop)
iTo = iFrom
End If
Next iLoop
If sResult <> "" Then sResult = sResult & ","
If iFrom = iTo Then
sResult = sResult & iFrom
Else
sResult = sResult & iFrom & "-" & iTo
End If
OutputStr = sResult
End Function

Private Sub Form_Load()
Debug.Print OutputStr("5,6,11,30,42,31,7,8,35")
End
End Sub

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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