vb.NET - 将我的控制台应用程序代码传输到 windows 表单,我需要一些调整来显示结果
vb.NET - Transferred my console application code to windows forms and I need some tweaks to display the result
我已经为我的大学项目在控制台应用程序中编写了一些程序,但现在我需要使用 windows 表单来正确显示我的结果。我转移了我的控制台代码,取出了 console.writeline(s)
和 console.readline(s)
,而是使用以下方法保存了文本框中的输入:
Dim SoundexString As String = StringInput.Text
无论如何,我的代码在控制台中输出正常,并且我已经设法使用“messagebox.show(xxx)
”和“textbox.text = xxx
”以 windows 形式输出其他内容。出于某种原因,我当前的代码不会输出最终变量 "SoundexCode"... 如果有任何建议,我将不胜感激。代码如下:
Public Class Form1
Public Sub ButtonConvert_Click(sender As Object, e As EventArgs) Handles ButtonConvert.Click
Dim SoundexString As String = StringInput.Text
Dim SoundexCode(5) As Char
For i = 1 To 5
SoundexCode(i) = "0"
Next
GetSoundex(SoundexString, SoundexCode)
MessageBox.Show(SoundexCode)
End Sub
Function GetSoundex(ByVal SoundexString As String, ByRef SoundexCode() As Char)
Dim StringLength As Integer = Len(SoundexString)
Dim LetterArray(StringLength) As Char
'Soundex arrays to check each rule before creating soundex code
Dim SoundexNumbers(StringLength) As Char
Dim DoubleLetters(StringLength) As Char
Dim ConsonantVowel(StringLength) As Char
'Assigning Number Locations to Individual Letters, Each Letter is in Correct Position
For i = 1 To StringLength
LetterArray(i) = CChar(SoundexString(i - 1))
Next
'1. Soundex Letters into Numbers
GetSoundexNumbers(LetterArray, SoundexNumbers, StringLength)
'2. Names with Double Letters / Double Soundex Numbers
RemoveDuplicateLetters(LetterArray, DoubleLetters, StringLength, SoundexNumbers)
'3. Consonant Vowel Seperation
SeperateConsonantVowel(LetterArray, StringLength, SoundexNumbers, ConsonantVowel)
'4. Creating Soundex
GetSoundexCode(LetterArray, StringLength, SoundexNumbers, DoubleLetters, ConsonantVowel, SoundexCode)
Return SoundexCode
End Function
Function GetSoundexNumbers(ByVal LetterArray() As Char, ByRef SoundexNumbers() As Char, ByVal StringLength As Integer)
For i = 1 To StringLength
SoundexNumbers(i) = LetterArray(i)
Next
For i = 1 To StringLength
Select Case SoundexNumbers(i)
Case "b", "f", "p", "v", "B", "F", "P", "V"
SoundexNumbers(i) = "1"
Case "c", "g", "j", "k", "q", "s", "x", "z", "C", "G", "J", "K", "Q", "S", "X", "Z"
SoundexNumbers(i) = "2"
Case "d", "t", "D", "T"
SoundexNumbers(i) = "3"
Case "l", "L"
SoundexNumbers(i) = "4"
Case "m", "M", "n", "N"
SoundexNumbers(i) = "5"
Case "r", "R"
SoundexNumbers(i) = "6"
'Unwanted Cases - Vowels / Phonetic Vowels
Case "a", "e", "i", "o", "u", "h", "w", "y", "A", "E", "I", "O", "U", "H", "W", "Y"
SoundexNumbers(i) = "!"
End Select
Next
Return SoundexNumbers
End Function
Function RemoveDuplicateLetters(ByVal LetterArray() As Char, ByRef DoubleLetters() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char)
For i = 1 To StringLength
DoubleLetters(i) = LetterArray(i)
Next
'Checking Double Letters
For i = 1 To StringLength
If i < StringLength Then
If DoubleLetters(i) = DoubleLetters(i + 1) Then
DoubleLetters(i + 1) = "!"
End If
End If
Next
'Checking Double Soundex Numbers
For i = 1 To StringLength
If i < StringLength Then
If SoundexNumbers(i) = SoundexNumbers(i + 1) Then
DoubleLetters(i + 1) = "!"
End If
End If
Next
Return DoubleLetters
End Function
Function SeperateConsonantVowel(ByVal LetterArray() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char, ByRef ConsonantVowel() As Char)
For i = 1 To StringLength
ConsonantVowel(i) = LetterArray(i)
Next
'Checking that a Vowel does not have Letters both Sides which Share same Soundex Number
For i = 1 To StringLength
If i > 1 And i < StringLength Then
If ConsonantVowel(i) = "a" Or ConsonantVowel(i) = "e" Or ConsonantVowel(i) = "i" Or ConsonantVowel(i) = "o" Or ConsonantVowel(i) = "u" Or ConsonantVowel(i) = "A" Or ConsonantVowel(i) = "E" Or ConsonantVowel(i) = "I" Or ConsonantVowel(i) = "O" Or ConsonantVowel(i) = "U" Then
If SoundexNumbers(i - 1) = SoundexNumbers(i + 1) Then
ConsonantVowel(i - 1) = "!"
End If
End If
End If
Next
Return ConsonantVowel
End Function
Function GetSoundexCode(ByVal LetterArray() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char, ByVal DoubleLetters() As Char, ByVal ConsonantVowel() As Char, ByRef SoundexCode() As Char)
SoundexCode(1) = LetterArray(1)
SoundexCode(2) = "-"
Dim Counter As Integer
Dim CounterStore As Integer
For Counter = 2 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(3) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
If CounterStore < StringLength Then
For Counter = CounterStore + 1 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(4) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
ElseIf CounterStore = StringLength Then
SoundexCode(4) = "0"
SoundexCode(5) = "0"
End If
If CounterStore < StringLength Then
For Counter = CounterStore + 1 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(5) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
ElseIf CounterStore = StringLength Then
SoundexCode(5) = "0"
End If
Return SoundexCode
End Function
End Class
字符串是从 0 开始的数组(首字母从索引 0 开始),但 SoundexCode 是从 1 开始的数组(即索引 0 为空),因此当它转换为字符串时,SoundexCode 显示为空字符串。
要修复您的代码,只需使用 String(value As Char(), startIndex As Integer, length As Integer) 构造函数而不是常规构造函数。
即。
MessageBox.Show(新字符串(SoundexCode, 1, 5))
我已经为我的大学项目在控制台应用程序中编写了一些程序,但现在我需要使用 windows 表单来正确显示我的结果。我转移了我的控制台代码,取出了 console.writeline(s)
和 console.readline(s)
,而是使用以下方法保存了文本框中的输入:
Dim SoundexString As String = StringInput.Text
无论如何,我的代码在控制台中输出正常,并且我已经设法使用“messagebox.show(xxx)
”和“textbox.text = xxx
”以 windows 形式输出其他内容。出于某种原因,我当前的代码不会输出最终变量 "SoundexCode"... 如果有任何建议,我将不胜感激。代码如下:
Public Class Form1
Public Sub ButtonConvert_Click(sender As Object, e As EventArgs) Handles ButtonConvert.Click
Dim SoundexString As String = StringInput.Text
Dim SoundexCode(5) As Char
For i = 1 To 5
SoundexCode(i) = "0"
Next
GetSoundex(SoundexString, SoundexCode)
MessageBox.Show(SoundexCode)
End Sub
Function GetSoundex(ByVal SoundexString As String, ByRef SoundexCode() As Char)
Dim StringLength As Integer = Len(SoundexString)
Dim LetterArray(StringLength) As Char
'Soundex arrays to check each rule before creating soundex code
Dim SoundexNumbers(StringLength) As Char
Dim DoubleLetters(StringLength) As Char
Dim ConsonantVowel(StringLength) As Char
'Assigning Number Locations to Individual Letters, Each Letter is in Correct Position
For i = 1 To StringLength
LetterArray(i) = CChar(SoundexString(i - 1))
Next
'1. Soundex Letters into Numbers
GetSoundexNumbers(LetterArray, SoundexNumbers, StringLength)
'2. Names with Double Letters / Double Soundex Numbers
RemoveDuplicateLetters(LetterArray, DoubleLetters, StringLength, SoundexNumbers)
'3. Consonant Vowel Seperation
SeperateConsonantVowel(LetterArray, StringLength, SoundexNumbers, ConsonantVowel)
'4. Creating Soundex
GetSoundexCode(LetterArray, StringLength, SoundexNumbers, DoubleLetters, ConsonantVowel, SoundexCode)
Return SoundexCode
End Function
Function GetSoundexNumbers(ByVal LetterArray() As Char, ByRef SoundexNumbers() As Char, ByVal StringLength As Integer)
For i = 1 To StringLength
SoundexNumbers(i) = LetterArray(i)
Next
For i = 1 To StringLength
Select Case SoundexNumbers(i)
Case "b", "f", "p", "v", "B", "F", "P", "V"
SoundexNumbers(i) = "1"
Case "c", "g", "j", "k", "q", "s", "x", "z", "C", "G", "J", "K", "Q", "S", "X", "Z"
SoundexNumbers(i) = "2"
Case "d", "t", "D", "T"
SoundexNumbers(i) = "3"
Case "l", "L"
SoundexNumbers(i) = "4"
Case "m", "M", "n", "N"
SoundexNumbers(i) = "5"
Case "r", "R"
SoundexNumbers(i) = "6"
'Unwanted Cases - Vowels / Phonetic Vowels
Case "a", "e", "i", "o", "u", "h", "w", "y", "A", "E", "I", "O", "U", "H", "W", "Y"
SoundexNumbers(i) = "!"
End Select
Next
Return SoundexNumbers
End Function
Function RemoveDuplicateLetters(ByVal LetterArray() As Char, ByRef DoubleLetters() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char)
For i = 1 To StringLength
DoubleLetters(i) = LetterArray(i)
Next
'Checking Double Letters
For i = 1 To StringLength
If i < StringLength Then
If DoubleLetters(i) = DoubleLetters(i + 1) Then
DoubleLetters(i + 1) = "!"
End If
End If
Next
'Checking Double Soundex Numbers
For i = 1 To StringLength
If i < StringLength Then
If SoundexNumbers(i) = SoundexNumbers(i + 1) Then
DoubleLetters(i + 1) = "!"
End If
End If
Next
Return DoubleLetters
End Function
Function SeperateConsonantVowel(ByVal LetterArray() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char, ByRef ConsonantVowel() As Char)
For i = 1 To StringLength
ConsonantVowel(i) = LetterArray(i)
Next
'Checking that a Vowel does not have Letters both Sides which Share same Soundex Number
For i = 1 To StringLength
If i > 1 And i < StringLength Then
If ConsonantVowel(i) = "a" Or ConsonantVowel(i) = "e" Or ConsonantVowel(i) = "i" Or ConsonantVowel(i) = "o" Or ConsonantVowel(i) = "u" Or ConsonantVowel(i) = "A" Or ConsonantVowel(i) = "E" Or ConsonantVowel(i) = "I" Or ConsonantVowel(i) = "O" Or ConsonantVowel(i) = "U" Then
If SoundexNumbers(i - 1) = SoundexNumbers(i + 1) Then
ConsonantVowel(i - 1) = "!"
End If
End If
End If
Next
Return ConsonantVowel
End Function
Function GetSoundexCode(ByVal LetterArray() As Char, ByVal StringLength As Integer, ByVal SoundexNumbers() As Char, ByVal DoubleLetters() As Char, ByVal ConsonantVowel() As Char, ByRef SoundexCode() As Char)
SoundexCode(1) = LetterArray(1)
SoundexCode(2) = "-"
Dim Counter As Integer
Dim CounterStore As Integer
For Counter = 2 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(3) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
If CounterStore < StringLength Then
For Counter = CounterStore + 1 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(4) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
ElseIf CounterStore = StringLength Then
SoundexCode(4) = "0"
SoundexCode(5) = "0"
End If
If CounterStore < StringLength Then
For Counter = CounterStore + 1 To StringLength
If SoundexNumbers(Counter) <> "!" And DoubleLetters(Counter) <> "!" And ConsonantVowel(Counter) <> "!" Then
SoundexCode(5) = SoundexNumbers(Counter)
CounterStore = Counter
Exit For
End If
Next
ElseIf CounterStore = StringLength Then
SoundexCode(5) = "0"
End If
Return SoundexCode
End Function
End Class
字符串是从 0 开始的数组(首字母从索引 0 开始),但 SoundexCode 是从 1 开始的数组(即索引 0 为空),因此当它转换为字符串时,SoundexCode 显示为空字符串。
要修复您的代码,只需使用 String(value As Char(), startIndex As Integer, length As Integer) 构造函数而不是常规构造函数。
即。 MessageBox.Show(新字符串(SoundexCode, 1, 5))