计算和搜索字符串

Counting and searching for strings

我的作业已经完成了一半,我已经找到了一种通过在文本框中键入字符并能够使用不同的按钮将其添加到开头、中间或结尾来组成单词的方法。另一半是, 字符计数 计算特定字符在魔法词中出现的次数以及 在标签中为用户显示此号码。 搜索 查找字符串是否存在于魔术词中。如果存在,则说明有多少 次。它还指示在 Magic 中找到的字符串前后出现的字符 单词。 对于 80:字符计数有效并显示字符出现的正确次数 在有 bug 的 Magic Word 中。 对于 90:搜索计数正确但无法显示“之前”或“之后”字符串。 对于 100:所有功能都按照描述和演示的方式工作。 对于 110:该程序是用户友好的,并向用户提供有关情况的消息 包括:“找不到字符串。”它还不允许访问搜索按钮 除非相应文本框中的字母和 Magic Word 中的字母都存在 This is what my program looks like so far, the top part's code is already completed but the bottom half isn't and I am currently lost. I will attach all my code so far.

Public Class Form1

Dim labelMaxLength = 18

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    NewText = MagicLetter & NewText
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    Dim TextLength As Long
    TextLength = Len(NewText)
    Dim LeftPart As String
    LeftPart = Mid(NewText, 1, CLng(TextLength / 2))
    Dim RightPart As String
    RightPart = Mid(NewText, Len(LeftPart) + 1)
    NewText = LeftPart & MagicLetter & RightPart
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    NewText = NewText & MagicLetter
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If
End Sub


Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    NewText = Mid(OriginalText, 2)
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If

End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    NewText = Mid(OriginalText, 1, Len(OriginalText) / 2) & Mid(OriginalText, (Len(OriginalText) / 2) + 2)
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If

End Sub

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    Dim OriginalText As String
    OriginalText = Label3.Text
    Dim MagicLetter As String
    MagicLetter = TextBox1.Text
    Dim NewText As String
    NewText = OriginalText
    NewText = Mid(OriginalText, 1, OriginalText.Length() - 1)
    If NewText.Length() <= labelMaxLength Then
        Label3.Text = NewText
    End If
End Sub

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    Label3.Text = ""
End Sub

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    Close()
End Sub

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

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

结束Class

非常感谢,我是编码新手,会接受任何建议。

您可以在声明变量的同一行中为变量赋值。如果您有 Option Infer,则不必显式提供类型(字符串、整数等)。从您分配的内容推断出的类型。将光标悬停在变量上,您将看到其推断的类型。

在设计时将 txtLetterToAdd TextBox 的 MaxiLength 属性 设置为 1。这样用户将只能输入一个字符。

你有太多不必要的变量。如果您在一个方法中多次使用控件外的值,创建一个变量是明智的,但如果只使用一次,则直接使用它。您的代码更简单易读。

当 lblNewString.Text 的长度达到 18 时,按钮将被禁用。因为我们想在每次添加后进行检查,所以我们制作了一个单独的子,这样我们就不会重复自己。

我正在使用字典来跟踪字符和计数。每次添加新字符时,我都会检查它是否已经在字典中。如果是,我会增加值。如果不是,我在字典中添加一个值为 1 的新条目。

Private NewStringMaxLength As Integer = 18
Private CharacterCount As New Dictionary(Of String, Integer)

Private Sub btnAddBeginning_Click(sender As Object, e As EventArgs) Handles btnAddBeginning.Click
    lblNewString.Text = txtLetterToAdd.Text & lblNewString.Text
    DisplayCharacterCounts()
    CheckLengthAndDisable()
End Sub

Private Sub btnAddMiddle_Click(sender As Object, e As EventArgs) Handles btnAddMiddle.Click
    Dim WordMiddle = lblNewString.Text.Length \ 2
    lblNewString.Text = lblNewString.Text.Insert(WordMiddle, txtLetterToAdd.Text)
    DisplayCharacterCounts()
    CheckLengthAndDisable()
End Sub

Private Sub btnAddToEnd_Click(sender As Object, e As EventArgs) Handles btnAddToEnd.Click
    lblNewString.Text &= txtLetterToAdd.Text
    DisplayCharacterCounts()
    CheckLengthAndDisable()
End Sub

Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
    lblNewString.Text = ""
    lblDisplayCharacterCount.Text = ""
    CharacterCount.Clear()
    'In case the 18 limit has be reached
    btnAddBeginning.Enabled = True
    btnAddMiddle.Enabled = True
    btnAddToEnd.Enabled = True
End Sub

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    Close()
End Sub

Private Sub DisplayCharacterCounts()
    Dim Letter = txtLetterToAdd.Text
    If CharacterCount.ContainsKey(Letter) Then
        CharacterCount(Letter) += 1
    Else
        CharacterCount.Add(Letter, 1)
    End If
    Dim s = ""
    For Each item As KeyValuePair(Of String, Integer) In CharacterCount
        s &= $"For character {item.Key} the are {item.Value} occurances" & Environment.NewLine
    Next
    lblDisplayCharacterCount.Text = s
End Sub

Private Sub CheckLengthAndDisable()
    If lblNewString.Text.Length() >= NewStringMaxLength Then
        btnAddBeginning.Enabled = False
        btnAddMiddle.Enabled = False
        btnAddToEnd.Enabled = False
    End If
End Sub

我使用 RadioButton 而不是 CheckBox 来使选择更加人性化。 并且可以显示第一个“Search”字符串的“Before”字符串和最后一个“Search”字符串的“After”字符串。

Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
    If RadioButton1.Checked Then
        Label4.Visible = False
        Label5.Visible = False
    ElseIf RadioButton2.Checked Then
        Label4.Visible = True
        Label5.Visible = True
    End If
End Sub

Private Sub Button_Count_Click(sender As Object, e As EventArgs) Handles Button_Count.Click

    If RadioButton1.Checked Then
        Dim count As Integer = 0, ch As Char

        For i = 1 To Len(Label3.Text)
            ch = LCase(Mid(Label3.Text, i, 1))
            If ch.ToString = TextBox2.Text Then
                count = count + 1
            End If
        Next
        Label2.Text = "instances:" & count
    End If

    If RadioButton2.Checked Then
        If InStr(Label3.Text, TextBox2.Text) Then
            Dim ct As String() = Split(Label3.Text, TextBox2.Text)
            Label2.Text = "instances:" & ct.Length - 1
            Label4.Text = "First Occurance After:" & ct(0)
            Label5.Text = "First Occurance Before:" & ct(ct.Length - 1)
        Else
            MsgBox("String string not found.", MsgBoxStyle.OkOnly, "Sorry")
        End If
    End If
End Sub

Private Sub Label3_TextChanged(sender As Object, e As EventArgs) Handles Label3.TextChanged
    If Label3.Text Is "" Then
        Button_Count.Enabled = False
    Else
        Button_Count.Enabled = True
    End If
End Sub

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    If TextBox2.Text Is "" Then
        Button_Count.Enabled = False
    Else
        Button_Count.Enabled = True
    End If
End Sub

我的测试结果: