2016-04-26 75 views
0

對於我在uni編程任務中的一個,我需要創建一個包含單詞並使其成爲複數的vb程序。然後我們必須寫下我們面臨的困難等。
我只是想解決如何去做這件事。從我所看到的,你首先必須把它分解成它的字符,然後確定字符串的最後一個字符是什麼。從那裏我認爲這是一個if語句負載的情況,它使用string.join運算符在末尾添加諸如「s」之類的內容。加入似乎相當簡單,但它是如何分解輸入的單詞,並確定最後的字符,這是困擾我。
我必須提到,我只在大學一年級學習,所以我在編程方面並不是很先進,所以如果你能提供幫助的話,請儘可能讓有限知識的人理解!在Visual Basic中拆分單詞

由於提前, 安德魯

+2

一字符串是一個字符數組。您可以使用length - 1索引到數組中以獲取最後一個字符。或者使用Linq,您可以使用.Last()擴展方法獲取最後一個字符。許多不同的方式。無論如何,你真的不想這麼做。坐下來用筆和紙以及隨機單詞列表。反過來,使他們成爲複數。你怎麼做呢?在你的行動中尋找模式,並用文字。識別這些模式成爲您的算法。一旦你有你的算法,你可以處理你的代碼。 – Will

+0

有一些字符串操作可以幫助解決這個問題。查看MSDN上列出的字符串類的所有方法https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx –

+0

到目前爲止您嘗試過了什麼?你的具體問題是什麼?我們可以看到一些代碼嗎? –

回答

0

像邁克和威爾說,有很多可能性,這個代碼僅僅是某些情況下,它使用If語句,然而Case聲明可能會更好

Protected Sub btnPlural_Click(sender As Object, e As EventArgs) Handles btnPlural.Click 
    Dim strWord As String 
    Dim lastLetter As String 
    Dim secondlast As String 


    If txtWord.Text <> "" Then 
     strWord = txtWord.Text 
     lastLetter = GetChar(strWord, strWord.Length) 
     secondlast = GetChar(strWord, strWord.Length - 1) 
     If lastLetter = "r" Or lastLetter = "p" Or lastLetter = "t" Then 
      strWord = strWord + "s" 
      lblPlural.Text = strWord 
     End If 
     If lastLetter = "e" Then 
      If secondlast = "f" Then 
       strWord = strWord.Substring(0, strWord.Length - 2) + "ves" 
       lblPlural.Text = strWord 
      Else 
       strWord = strWord + "s" 
       lblPlural.Text = strWord 
      End If 

     End If 

     If lastLetter = "x" Then 
      strWord = strWord + "es" 
      lblPlural.Text = strWord 
     End If 
     If lastLetter = "h" Then 
      If secondlast = "c" Then 
       strWord = strWord + "es" 
       lblPlural.Text = strWord 
      Else 
       strWord = strWord + "s" 
       lblPlural.Text = strWord 
      End If 
     End If 

     If lastLetter = "y" Then 
      If secondlast = "t" Or secondlast = "d" Or secondlast = "n" Then 
       strWord = strWord.Substring(0, strWord.Length - 1) + "ies" 
       lblPlural.Text = strWord 
      ElseIf secondlast = "e" Or secondlast = "a" Or secondlast = "o" Then 
       strWord = strWord + "s" 
       lblPlural.Text = strWord 
      End If 
     End If 

    End If 

End Sub 

希望這有助於

+0

非常感謝。這已經清理了很多!我的問題是,導師在答案附近沒有真正指出我們的位置,所以只需進行一些修改即可解決問題!非常感謝! –

+0

@AndrewRichardson如果我的回答對你有幫助,你可以將其標記爲已接受的答案,很高興我能幫到你 – abichango

0

如果你只是想一個「S」字符添加到字符串要檢查的最後一個字符已經

Dim myString As String = "Shoe" 
myString += "s" 
'myString is now "Shoes" 

或做結束一個「s」,改變「可愛」到「cuties」等?

+0

在某種程度上,將會需要一個例外清單,因爲八爪魚的複數是Octopi,而綿羊的複數是羊。我猜如果這個詞不在研究的例外列表中,那麼你必須SELECT CASE RIGHT(str,3),然後是2個字符,然後是最後一個。我其實不確定你是否需要掃描3或2,但字典可能會有所幫助。 –

+1

我認爲推薦的方法是使用'&='將字符串連接到自身 –

+0

還有一些開放源代碼的詞典也可以在線使用複數形式,除了簡單添加's'之外還有一些不明確的規則,到例外列表。順便說一句,iirc中的'Octopus'的複數是'Octopuses'或'Octopodes',但是'Octopi'混合了希臘文和拉丁文。 – peterG

0

如果這是一個只是將「S」字符結束話題我會建議使用String.Format,並添加「S」:

Public Function pluralize(ByVal DesignString AS String) AS String 

     Return String.Format("{0}s",DesignString) ' ex : Shoe -> Shoes 

End Function 

跳上這可能是helpul你。