是你老师给你的作业,还是某某教材上的作业? 说实在的,这个功能用子过程来实现并不合理。 并且调用也不方便:必须传入一个字符串变量来‘接收’返回值(也许用“接受”这个词更恰当),且它的值在调用时必须为空串(否则有可能造成结果不正确)。 用函数相对好些:传入一个字符串,返回这个串中最长的单词。调用时也没什么限制。 这是按你的‘要求’写的: Sub MaxLength(s$, MaxWord$) Static wSave$, lFlag& Dim i&, Word$ If (Len(s) = 0) Then MaxWord = wSave lFlag = 0: wSave = "" Exit Sub End If i = InStr(1, s, " "): Word = Left$(s, i - 1) If (Len(Word) > Len(wSave)) Then wSave = Word Word = Mid$(s, i + 1) If (lFlag = 0) Then lFlag = 1: Word = Word & " " MaxLength Word, MaxWordEnd Sub
Private Sub MaxLength(s, MaxWord) While s <> "" i = InStr(s, " ") If i <> 0 Then Word = Left(s, i - 1) s = Mid(s, i + 1) Else Word = s s = "" End If If Len(MaxWord) < Len(Word) Then _ MaxWord = Word Wend End Sub
用split更简单一些
并且调用也不方便:必须传入一个字符串变量来‘接收’返回值(也许用“接受”这个词更恰当),且它的值在调用时必须为空串(否则有可能造成结果不正确)。 用函数相对好些:传入一个字符串,返回这个串中最长的单词。调用时也没什么限制。
这是按你的‘要求’写的:
Sub MaxLength(s$, MaxWord$) Static wSave$, lFlag&
Dim i&, Word$
If (Len(s) = 0) Then
MaxWord = wSave
lFlag = 0: wSave = ""
Exit Sub
End If
i = InStr(1, s, " "): Word = Left$(s, i - 1)
If (Len(Word) > Len(wSave)) Then wSave = Word
Word = Mid$(s, i + 1)
If (lFlag = 0) Then lFlag = 1: Word = Word & " "
MaxLength Word, MaxWordEnd Sub
Private Sub MaxLength(s, MaxWord)
While s <> ""
i = InStr(s, " ")
If i <> 0 Then
Word = Left(s, i - 1)
s = Mid(s, i + 1)
Else
Word = s
s = ""
End If
If Len(MaxWord) < Len(Word) Then _
MaxWord = Word
Wend
End Sub