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] 是执行搜索时使用的模式。它匹配您在方括号内写入的任何字符。

示例:

http://ideone.com/LEYC30

阅读有关正则表达式的更多信息:

MSDN - .NET Framework Regular Expressions

MSDN - Regular Expression Language - Quick Reference

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

subfunction 之间最明显的变化是更改了 过程 的关键字。对于这次对话,我们只说这是一个很好的词来包含这两个概念,因为它们非常相似,而且许多语言并没有真正划出这么大的区别。

出于 Visual Basic 的目的,函数需要 return 某些东西,这由我添加到两个函数声明末尾的 As Integer 表示(不记得是否正确VB 术语。)同样在 VB 中,您 return 通过分配给函数名称来给调用者一个值(另请参见下面的编辑。)所以我替换了那些 WriteLines 具有适当的分配。最后,我将那些 WriteLine 语句移到了 Main 中。需要更改参数以使用函数 return 值而不是它们最初引用的变量。

希望我不是在替你做功课!

编辑:Visual Basic 在 2000 年代初迁移到 .Net 期间对语言进行了大量更改。我忘记了(或者甚至可能没有意识到)returning 值的新首选现在更符合 C# 等语言。因此,与其将值分配给 WordCountVowelCount,不如使用 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,您需要做三件事。首先,您需要将 SubEnd Sub 关键字分别更改为 FunctionEnd 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