2016-04-26 74 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你。