回 帖 发 新 帖 刷新版面

主题:字符串处理

[size=3]要求:编写一个子过程MaxLength(s,MaxWord),在已知的字符串s中,找出最长的单词[size=6]MaxWord。代码如下:
  Private Sub Command1_Click()
    Dim s As String, Maxword As String
    s = Text1.Text
    Text2.Text = MaxLength(s, Maxword)
End Sub

Public Function MaxLength(s As String, Maxword As String) As String
   Dim i%, l%
   Maxword = ""
   Do While Len(s) > 0
      i = InStr(s, " ")
      word = Left(s, i - 1)
      If Len(word) > Len(Maxword) Then
         Maxword = word
      End If
      s = Mid(s, i + 1)
      word = ""
   Loop
   MaxLength = Maxword
End Function
  运行结果会出错,提示:“无效的过程调用或参数”,黄色光标停留在word = Left(s, i - 1)句上。[/size][/size]

回复列表 (共4个回复)

沙发

建议使用msgbox 在程序中建立断点,查看程序实时运行状态。

板凳

Private Sub Command1_Click()
Text2 = MaxLength(Trim(Text1))
End Sub

Public Function MaxLength(s As String) As String
Dim i%, word As String, Maxword As String
Do While Len(s)
  i = InStr(s, " "): If i < 2 Then Exit Do
  word = Left(s, i - 1)
  If Len(word) > Len(Maxword) Then Maxword = word
  s = Trim(Mid(s, i + 1))
Loop
MaxLength = Maxword
End Function

代码中使用Trim来去除字串两头的空格,这是为了防止有的人无意中多打了若干个连续的空格

3 楼


我把你的这个代码拷过去运行时发现,当被空格分隔的最后一个字符串最长时它无法正确输出,其他都没有问题,请问是怎么回事?

4 楼

不好意思,这是我考虑不周,改一下:

Public Function MaxLength(s As String) As String
Dim i%, word As String, Maxword As String
Do While Len(s)
  i = InStr(s, " ")
  If i < 2 Then
    If Len(s) > Len(Maxword) Then Maxword = s
    Exit Do
  End If
  word = Left(s, i - 1)
  If Len(word) > Len(Maxword) Then Maxword = word
  s = Trim(Mid(s, i + 1))
Loop
MaxLength = Maxword
End Function

我来回复

您尚未登录,请登录后再回复。点此登录或注册