You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET作业求助:实现magic word字符串计数与搜索功能

作业功能实现方案

第一步:补充界面控件

你需要在现有界面下半部分新增以下控件:

  • 字符计数模块:
    • 输入文本框:命名为txtCountChar,用于输入待统计的字符
    • 功能按钮:命名为btnCount,按钮文本为「统计字符出现次数」
    • 结果展示标签:命名为lblCountResult,用于展示统计结果
  • 搜索功能模块:
    • 输入文本框:命名为txtSearchStr,用于输入待搜索的字符串
    • 功能按钮:命名为btnSearch,按钮文本为「搜索字符串」
    • 结果展示标签:命名为lblSearchResult,用于展示搜索结果,可把AutoSize属性设为False,调整足够大小展示多行内容

第二步:新增功能代码

直接在你现有代码的End Class之前添加以下代码即可:

' 刷新按钮可用状态,满足110分档的按钮可用性要求
Private Sub RefreshButtonEnabledStatus()
    ' 统计按钮仅当magic word不为空、统计输入框有内容时可用
    btnCount.Enabled = Not String.IsNullOrEmpty(Label3.Text) AndAlso Not String.IsNullOrEmpty(txtCountChar.Text)
    ' 搜索按钮仅当magic word不为空、搜索输入框有内容时可用
    btnSearch.Enabled = Not String.IsNullOrEmpty(Label3.Text) AndAlso Not String.IsNullOrEmpty(txtSearchStr.Text)
End Sub

' 监控输入和magic word变化,实时刷新按钮状态
Private Sub Label3_TextChanged(sender As Object, e As EventArgs) Handles Label3.TextChanged
    RefreshButtonEnabledStatus()
End Sub

Private Sub txtCountChar_TextChanged(sender As Object, e As EventArgs) Handles txtCountChar.TextChanged
    RefreshButtonEnabledStatus()
End Sub

Private Sub txtSearchStr_TextChanged(sender As Object, e As EventArgs) Handles txtSearchStr.TextChanged
    RefreshButtonEnabledStatus()
End Sub

' 字符计数功能(满足80分档要求)
Private Sub btnCount_Click(sender As Object, e As EventArgs) Handles btnCount.Click
    Dim targetChar As Char = txtCountChar.Text.Trim()(0)
    Dim magicWord As String = Label3.Text
    Dim appearCount As Integer = magicWord.Count(Function(c) c = targetChar)
    lblCountResult.Text = $"字符 '{targetChar}' 出现次数:{appearCount}"
End Sub

' 搜索功能(满足90-110分档要求)
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    Dim searchStr As String = txtSearchStr.Text.Trim()
    Dim magicWord As String = Label3.Text
    Dim searchLen As Integer = searchStr.Length
    Dim matchCount As Integer = 0
    Dim resultBuilder As New System.Text.StringBuilder()
    Dim startPos As Integer = 0

    While startPos <= magicWord.Length - searchLen
        Dim matchPos As Integer = magicWord.IndexOf(searchStr, startPos)
        If matchPos = -1 Then Exit While
        matchCount += 1
        ' 提取匹配位置前后最多5个字符,超出加省略号
        Dim prefix As String = ""
        If matchPos > 0 Then
            prefix = If(matchPos > 5, "...", "") & magicWord.Substring(Math.Max(0, matchPos - 5), Math.Min(5, matchPos))
        End If
        Dim suffix As String = ""
        Dim suffixStart As Integer = matchPos + searchLen
        If suffixStart < magicWord.Length Then
            suffix = magicWord.Substring(suffixStart, Math.Min(5, magicWord.Length - suffixStart)) & If(suffixStart + 5 < magicWord.Length, "...", "")
        End If
        resultBuilder.AppendLine($"第{matchCount}处匹配:{prefix}[{searchStr}]{suffix}")
        startPos = matchPos + 1
    End While

    If matchCount = 0 Then
        lblSearchResult.Text = "String not found."
    Else
        lblSearchResult.Text = $"共找到{matchCount}处匹配:{vbCrLf}{resultBuilder.ToString()}"
    End If
End Sub

现有代码bug修正

你原来的复选框逻辑写的是判断Enabled属性,实际应该判断Checked属性,修改后代码如下:

Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
    If CheckBox2.Checked Then
        Label4.Visible = False
        Label5.Visible = False
    End If
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    If CheckBox1.Checked Then
        Label4.Visible = True
        Label5.Visible = True
    End If
End Sub

内容的提问来源于stack exchange,提问作者luke lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:15:05