计算和搜索字符串
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
我的测试结果:
我的作业已经完成了一半,我已经找到了一种通过在文本框中键入字符并能够使用不同的按钮将其添加到开头、中间或结尾来组成单词的方法。另一半是, 字符计数 计算特定字符在魔法词中出现的次数以及 在标签中为用户显示此号码。 搜索 查找字符串是否存在于魔术词中。如果存在,则说明有多少 次。它还指示在 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
我的测试结果: