【问题标题】:How do I find the longest sentence and the average sentence length in a textbox?如何在文本框中找到最长的句子和平均句子长度?
【发布时间】:2011-05-22 20:07:33
【问题描述】:

在文本框中输入几句话后,我需要通过单击按钮找到文本框中最长的句子。最长的句子应该显示在 MessageBox 中。

另一个按钮应该在 MessageBox 中显示句子的平均长度。

【问题讨论】:

  • 对于两者,只需对句子进行排序,然后,根据您的排序方式选择第一个或最后一个元素,作为最长的,那么平均值要么是 size/2 的元素,要么你可能需要计算长度并找到最接近的长度。这取决于你如何定义平均句子。
  • 这是为了学校作业吗?如果是这样,我认为您应该尝试向我们展示您已经对此有何想法。否则,您可以剪切并粘贴下面的答案,但您会学到什么?如果你想成为一名程序员,解决问题是工作的 90%。

标签: vb.net


【解决方案1】:

好的,我是新手,但我会尽力提供帮助!

我会考虑将在文本框中输入的句子拆分为数组或列表,然后对其进行处理。

Dim sentences As String()

sentences = TextBox1.Text.Split("?")
Dim avgSum As Double = 0
Dim avg As Integer = 0
Dim longest As Integer = 0

For Each sentence As String In sentences
    If sentence.Length < longest Then longest = sentence.Length
    avgSum = avgSum + sentence.Length
Next
avg = avgSum / sentences.Length

MsgBox("Average is: " + avg)
MsgBox("Longest is: " + longest)

【讨论】:

    【解决方案2】:

    定义三个函数:第一个函数提取所有句子,第二个函数确定最长的句子,第三个函数确定平均句子长度。

    提取所有句子

        ''' <summary>
        ''' Extracts all sentences from a text block. It is assumed that a sentence is terminated by either a period (.), a question mark (?), or an exclamation mark (!).
        ''' </summary>
        ''' <param name="text">The text block as string.</param>
        ''' <returns>An array of sentences.</returns>
        ''' <remarks></remarks>
        Function sentences(ByVal text As String) As String()
            Dim snts(Len(text)) As String
            Dim curPeriodPos As Integer
            Dim nextPeriodPos As Integer
            Dim longestSnt As String
            Dim nextSnt As String
            Dim i As Integer
    
            text = text + " "
            text = Replace(text, "? ", ". ")
            text = Replace(text, "! ", ". ")
    
            curPeriodPos = InStr(text, ". ")
            longestSnt = Mid(text, 1, curPeriodPos)
            i = 0
            Do While curPeriodPos + 1 < Len(text)
                nextPeriodPos = InStr(curPeriodPos + 1, text, ". ")
                nextSnt = Mid(text, curPeriodPos + 1, nextPeriodPos - curPeriodPos + 1)
                snts(i) = nextSnt
                i += 1
                curPeriodPos = nextPeriodPos
            Loop
    
            Return snts
        End Function
    

    确定最长的句子

        ''' <summary>
        ''' Determines the longest sentence among an array of senetences.
        ''' </summary>
        ''' <param name="sentencesArray">A string array of sentences.</param>
        ''' <returns> A sentence as string.</returns>
        ''' <remarks></remarks>
        Function longestSentence(ByVal sentencesArray() As String) As String
            Dim longestSnt As String = ""
    
            For Each sentence As String In sentencesArray
                If Len(sentence) > Len(longestSnt) Then
                    longestSnt = sentence
                End If
            Next sentence
    
            Return longestSnt
        End Function
    

    确定平均句子长度

        ''' <summary>
        ''' Determines the average sentence length of sentences in an array of sentences.
        ''' </summary>
        ''' <param name="sentencesArray">A string array of sentences.</param>
        ''' <returns>An integer representing the average sentence length.</returns>
        ''' <remarks></remarks>
        Function averageSentenceLength(ByVal sentencesArray() As String) As Double
            Dim sentenceLengths(sentencesArray.Length) As Integer
            Dim total As Integer = 0
            Dim average As Double
            Dim counter As Integer = 0
    
            For i As Integer = 0 To sentencesArray.Length - 1
                sentenceLengths(i) = Len(sentencesArray(i))
                If sentenceLengths(i) > 0 Then
                    total += sentenceLengths(i)
                    counter += 1
                End If
            Next i
    
            average = CDbl(total) / CDbl(counter)
    
            Return average
        End Function
    

    可以在按钮的事件处理程序中调用这些函数,如下所示:

    Private Sub DisplayLongestSentence() Handles longestSententeceButton.Click
        Dim text As String = TextBox1.Text
        MessageBox.Show(longestSentence(sentences(text)))
    End Sub
    
    Private Sub DisplayAverageSentenceLength() Handles averageSententeceLengthButton.Click
        Dim text As String = TextBox1.Text
        MessageBox.Show(averageSentenceLength(sentences(text)))
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2014-09-26
      相关资源
      最近更新 更多