VB.NET 中的单词计数和元音计数转换为函数
CountWord and CountVowel into Function in VB.NET
您好,我需要将 WordCount 和 CountVowel 过程更改为函数,并创建一个函数来计算字符串中辅音的数量。
我已经完成了这两个程序,但我不知道如何完成最后一部分。我对编程还很陌生。
我当前的代码如下:
Sub Main()
Dim Sentence As String
Console.WriteLine("Sentence Analysis" + vbNewLine + "")
Console.WriteLine("Enter a sentence, then press 'Enter'" + vbNewLine + "")
Sentence = Console.ReadLine()
Console.WriteLine("")
Call WordCount(Sentence)
Call VowelCount(Sentence)
Console.ReadLine()
End Sub
Sub WordCount(ByVal UserInput As String)
Dim Space As String() = UserInput.Split(" ")
Console.WriteLine("There are {0} words", Space.Length)
End Sub
Sub VowelCount(ByVal UserInput As String)
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
Console.WriteLine("There are {0} vowels", VowelNumber)
End Sub
感谢您的宝贵时间
您可以使用 Regex
class。它旨在使用模式搜索子字符串,而且速度也相当快。
Sub VowelCount(ByVal UserInput As String)
Console.WriteLine("There are {0} vowels", System.Text.RegularExpressions.Regex.Matches(UserInput, "[aeiou]", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Count.ToString())
End Sub
[aeiou]
是执行搜索时使用的模式。它匹配您在方括号内写入的任何字符。
示例:
阅读有关正则表达式的更多信息:
VB 不再是我经常使用的语言,但我认为即使不进行测试我也不会误导你。
Sub Main()
Dim Sentence As String
Console.WriteLine("Sentence Analysis" + vbNewLine + "")
Console.WriteLine("Enter a sentence, then press 'Enter'" + vbNewLine + "")
Sentence = Console.ReadLine()
Console.WriteLine("")
'usually it's better just let the function calculate a value and do output elsewhere
'so I've commented your original calls so you can see where they used to be
'Call WordCount(Sentence)
Console.WriteLine("There are {0} words", WordCount(Sentence))
'Call VowelCount(Sentence)
Console.WriteLine("There are {0} vowels", VowelCount(Sentence))
Console.ReadLine()
End Sub
Function WordCount(ByVal UserInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
WordCount = Space.Length
'or just shorten it to one line...
'Return UserInput.Split(" ").Length
End Function
Function VowelCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
VowelCount = VowelNumber
End Function
sub
和 function
之间最明显的变化是更改了 过程 的关键字。对于这次对话,我们只说这是一个很好的词来包含这两个概念,因为它们非常相似,而且许多语言并没有真正划出这么大的区别。
出于 Visual Basic 的目的,函数需要 return 某些东西,这由我添加到两个函数声明末尾的 As Integer
表示(不记得是否正确VB 术语。)同样在 VB 中,您 return 通过分配给函数名称来给调用者一个值(另请参见下面的编辑。)所以我替换了那些 WriteLine
s 具有适当的分配。最后,我将那些 WriteLine
语句移到了 Main
中。需要更改参数以使用函数 return 值而不是它们最初引用的变量。
希望我不是在替你做功课!
编辑:Visual Basic 在 2000 年代初迁移到 .Net 期间对语言进行了大量更改。我忘记了(或者甚至可能没有意识到)returning 值的新首选现在更符合 C# 等语言。因此,与其将值分配给 WordCount
和 VowelCount
,不如使用 Return
。两者之间的一个区别是 Return
会导致 sub/function 在该点退出,即使之后还有其他代码。例如,这在 if...end if
中可能很有用。我希望这能帮助你学到一些东西,而不是一头雾水。
编辑 #2:现在我看到了已接受的答案和 re-read 这个问题,似乎有一小部分关于计算辅音的部分被忽略了。在这一点上,我假设这确实是一个课堂练习,预期的答案甚至可能是通过使用其他函数来推导辅音计数。
我会使用以下三个函数。请注意,当单词之间有多个空格时,WordCount
使用 RemoveEmptyEntries
避免计算空单词。
另外两个函数将大写元音计为元音,而不仅仅是小写。他们利用字符串可以被视为 Char 数组这一事实,并使用 Count 方法来计算这些 Chars 中有多少符合特定条件。
请注意,将 "AEIOU" 指定为元音可能并非在所有语言中都是正确的,甚至在英语中 "Y" 有时也被视为元音。您可能还需要考虑重音字母的可能性,例如“É”。
Function WordCount(UserInput As String) As Integer
Return UserInput.Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Length
End Function
Function VowelCount(UserInput As String) As Integer
Return UserInput.Count(Function(c) "aeiouAEIOU".Contains(c))
End Function
Function ConsonantCount(UserInput As String) As Integer
Return UserInput.Count(Function(c) Char.IsLetter(c) And Not "aeiouAEIOU".Contains(c))
End Function
要将每个 Sub
例程变成 Function
,您需要做三件事。首先,您需要将 Sub
和 End Sub
关键字分别更改为 Function
和 End Function
。所以:
Sub MyMethod(input As String)
' ...
End Sub
变为:
Function MyMethod(input As String)
' ...
End Function
接下来,因为它是一个函数,它需要return一个值,所以你的Function
声明需要指定return值的类型。所以,上面的例子会变成:
Function MyMethod(input As String) As Integer
' ...
End Function
最后,函数中的代码必须实际指定 return 值是什么。在 VB.NET 中,这是通过使用 Return
关键字来实现的,如下所示:
Function MyMethod(input As String) As Integer
Dim result As Integer
' ...
Return result
End Function
因此,将其应用于您的示例:
Sub WordCount(ByVal UserInput As String)
Dim Space As String() = UserInput.Split(" ")
Console.WriteLine("There are {0} words", Space.Length)
End Sub
会变成:
Function WordCount(userInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
Return Space.Length
End Sub
请注意,ByVal
是默认值,因此您无需指定它,并且根据 .NET 中的标准约定,参数变量应该是驼峰命名法而不是 PascalCase。然后,当您调用该方法时,您可以像这样使用函数的 return 值:
Dim count As Integer = WordCount(Sentence)
Console.WriteLine("There are {0} words", count)
就计算辅音而言,这与您的 VowelCount
方法非常相似,不同之处在于您将为其提供要查找的辅音列表而不是元音。
给你。
Function WordCount(ByVal UserInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
Return Space.Length
End Function
Function VowelCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
Return VowelNumber
End Function
Function ConsonantCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim ConsonantNumber As Integer
Dim Consonants As String = "bcdfghjklmnpqrstvwxyz"
For i = 1 To Len(UserInput)
If InStr(Consonants, Mid(UserInput, i, 1)) Then
ConsonantNumber = ConsonantNumber + 1
End If
Next
Return ConsonantNumber
End Function
您好,我需要将 WordCount 和 CountVowel 过程更改为函数,并创建一个函数来计算字符串中辅音的数量。
我已经完成了这两个程序,但我不知道如何完成最后一部分。我对编程还很陌生。
我当前的代码如下:
Sub Main()
Dim Sentence As String
Console.WriteLine("Sentence Analysis" + vbNewLine + "")
Console.WriteLine("Enter a sentence, then press 'Enter'" + vbNewLine + "")
Sentence = Console.ReadLine()
Console.WriteLine("")
Call WordCount(Sentence)
Call VowelCount(Sentence)
Console.ReadLine()
End Sub
Sub WordCount(ByVal UserInput As String)
Dim Space As String() = UserInput.Split(" ")
Console.WriteLine("There are {0} words", Space.Length)
End Sub
Sub VowelCount(ByVal UserInput As String)
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
Console.WriteLine("There are {0} vowels", VowelNumber)
End Sub
感谢您的宝贵时间
您可以使用 Regex
class。它旨在使用模式搜索子字符串,而且速度也相当快。
Sub VowelCount(ByVal UserInput As String)
Console.WriteLine("There are {0} vowels", System.Text.RegularExpressions.Regex.Matches(UserInput, "[aeiou]", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Count.ToString())
End Sub
[aeiou]
是执行搜索时使用的模式。它匹配您在方括号内写入的任何字符。
示例:
阅读有关正则表达式的更多信息:
VB 不再是我经常使用的语言,但我认为即使不进行测试我也不会误导你。
Sub Main()
Dim Sentence As String
Console.WriteLine("Sentence Analysis" + vbNewLine + "")
Console.WriteLine("Enter a sentence, then press 'Enter'" + vbNewLine + "")
Sentence = Console.ReadLine()
Console.WriteLine("")
'usually it's better just let the function calculate a value and do output elsewhere
'so I've commented your original calls so you can see where they used to be
'Call WordCount(Sentence)
Console.WriteLine("There are {0} words", WordCount(Sentence))
'Call VowelCount(Sentence)
Console.WriteLine("There are {0} vowels", VowelCount(Sentence))
Console.ReadLine()
End Sub
Function WordCount(ByVal UserInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
WordCount = Space.Length
'or just shorten it to one line...
'Return UserInput.Split(" ").Length
End Function
Function VowelCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
VowelCount = VowelNumber
End Function
sub
和 function
之间最明显的变化是更改了 过程 的关键字。对于这次对话,我们只说这是一个很好的词来包含这两个概念,因为它们非常相似,而且许多语言并没有真正划出这么大的区别。
出于 Visual Basic 的目的,函数需要 return 某些东西,这由我添加到两个函数声明末尾的 As Integer
表示(不记得是否正确VB 术语。)同样在 VB 中,您 return 通过分配给函数名称来给调用者一个值(另请参见下面的编辑。)所以我替换了那些 WriteLine
s 具有适当的分配。最后,我将那些 WriteLine
语句移到了 Main
中。需要更改参数以使用函数 return 值而不是它们最初引用的变量。
希望我不是在替你做功课!
编辑:Visual Basic 在 2000 年代初迁移到 .Net 期间对语言进行了大量更改。我忘记了(或者甚至可能没有意识到)returning 值的新首选现在更符合 C# 等语言。因此,与其将值分配给 WordCount
和 VowelCount
,不如使用 Return
。两者之间的一个区别是 Return
会导致 sub/function 在该点退出,即使之后还有其他代码。例如,这在 if...end if
中可能很有用。我希望这能帮助你学到一些东西,而不是一头雾水。
编辑 #2:现在我看到了已接受的答案和 re-read 这个问题,似乎有一小部分关于计算辅音的部分被忽略了。在这一点上,我假设这确实是一个课堂练习,预期的答案甚至可能是通过使用其他函数来推导辅音计数。
我会使用以下三个函数。请注意,当单词之间有多个空格时,WordCount
使用 RemoveEmptyEntries
避免计算空单词。
另外两个函数将大写元音计为元音,而不仅仅是小写。他们利用字符串可以被视为 Char 数组这一事实,并使用 Count 方法来计算这些 Chars 中有多少符合特定条件。
请注意,将 "AEIOU" 指定为元音可能并非在所有语言中都是正确的,甚至在英语中 "Y" 有时也被视为元音。您可能还需要考虑重音字母的可能性,例如“É”。
Function WordCount(UserInput As String) As Integer
Return UserInput.Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Length
End Function
Function VowelCount(UserInput As String) As Integer
Return UserInput.Count(Function(c) "aeiouAEIOU".Contains(c))
End Function
Function ConsonantCount(UserInput As String) As Integer
Return UserInput.Count(Function(c) Char.IsLetter(c) And Not "aeiouAEIOU".Contains(c))
End Function
要将每个 Sub
例程变成 Function
,您需要做三件事。首先,您需要将 Sub
和 End Sub
关键字分别更改为 Function
和 End Function
。所以:
Sub MyMethod(input As String)
' ...
End Sub
变为:
Function MyMethod(input As String)
' ...
End Function
接下来,因为它是一个函数,它需要return一个值,所以你的Function
声明需要指定return值的类型。所以,上面的例子会变成:
Function MyMethod(input As String) As Integer
' ...
End Function
最后,函数中的代码必须实际指定 return 值是什么。在 VB.NET 中,这是通过使用 Return
关键字来实现的,如下所示:
Function MyMethod(input As String) As Integer
Dim result As Integer
' ...
Return result
End Function
因此,将其应用于您的示例:
Sub WordCount(ByVal UserInput As String)
Dim Space As String() = UserInput.Split(" ")
Console.WriteLine("There are {0} words", Space.Length)
End Sub
会变成:
Function WordCount(userInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
Return Space.Length
End Sub
请注意,ByVal
是默认值,因此您无需指定它,并且根据 .NET 中的标准约定,参数变量应该是驼峰命名法而不是 PascalCase。然后,当您调用该方法时,您可以像这样使用函数的 return 值:
Dim count As Integer = WordCount(Sentence)
Console.WriteLine("There are {0} words", count)
就计算辅音而言,这与您的 VowelCount
方法非常相似,不同之处在于您将为其提供要查找的辅音列表而不是元音。
给你。
Function WordCount(ByVal UserInput As String) As Integer
Dim Space As String() = UserInput.Split(" ")
Return Space.Length
End Function
Function VowelCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim VowelNumber As Integer
Dim Vowels As String = "aeiou"
For i = 1 To Len(UserInput)
If InStr(Vowels, Mid(UserInput, i, 1)) Then
VowelNumber = VowelNumber + 1
End If
Next
Return VowelNumber
End Function
Function ConsonantCount(ByVal UserInput As String) As Integer
Dim i As Integer
Dim ConsonantNumber As Integer
Dim Consonants As String = "bcdfghjklmnpqrstvwxyz"
For i = 1 To Len(UserInput)
If InStr(Consonants, Mid(UserInput, i, 1)) Then
ConsonantNumber = ConsonantNumber + 1
End If
Next
Return ConsonantNumber
End Function