2011-05-22 62 views
1

在文本框中輸入幾個句子後,我需要通過單擊按鈕在文本框中找到最長的句子。最長的句子應顯示在MessageBox中。如何在文本框中找到最長的句子和平均句子長度?

另一個按鈕應該在MessageBox中顯示句子的平均長度。

+0

對於這兩個,只是句子排序,那麼,這取決於你如何排序選擇第一個或最後一個元素,如最長的,那麼平均要麼是大小爲/ 2的元素,要麼可能需要計算長度並找到最接近的元素。這取決於你如何定義平均句子。 – 2011-05-22 20:27:35

+1

這是爲學校工作嗎?如果是這樣,我認爲你應該試着告訴我們你已經有了什麼想法。否則,您可以剪切並粘貼下面的答案,但您會學到什麼?如果你想成爲一名程序員,解決問題就是90%的工作。 – 2011-05-23 12:18:14

回答

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) 
0

定義三個功能:第一功能,以提取所有的句子,所述第二確定最長句子,和第三,以確定平均句子長度。

提取所有句子

''' <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 
相關問題