将字符串与数组中的字符串进行比较

问题描述:

我试图使用此脚本将来自文本框的用户输入与22个正确的单词进行比较。我不是在寻找多个案例,例如VICEADVICE,所以它会是2个值; 我希望它的字符串值只接受相等的值将字符串与数组中的字符串进行比较

目前,它只识别第一个单词TIED并显示一个消息框“found”,但它不会识别列表中的任何其他单词。

我在Visual Basic脚本

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 
    Dim StrCorrect() As String = {"TIED", "VICE", "ICED", "DIVE", "DIET", "DATE", "CITE", "CAVE", "AIDE", "ACED", "CITED", "ACTED", "VACATE", "CATTIE", "ADVICE", "AVIATE", "ACTIVE", "VACATED", "DICTATE", "AVIATED", "ACTIVATE", "ACTIVATED"} 
    Dim Find As String = userinput 
    For Each Str As String In StrCorrect 
     If StrComp(Str, userinput, CompareMethod.Text).ToString = 0 Then 
      MsgBox("Found" & userinput) 
      Return 
     Else : MsgBox("incorrect word") 
      Return 
     End If 
    Next 
End Sub 
+1

您可能要更何况你是语言写这个。'visual-studio'不是一种语言。 – Yakk 2013-04-25 15:29:33

+0

我的VB有点生疏,但是你不想用圆括号代替大括号吗? – Melanie 2013-04-25 15:38:21

+0

'我希望它的字符串值只接受相等的值.'相等的值并不意味着'VICE' ='Vice' – 2013-04-25 16:05:09

的问题是,你的循环被明确地返回,如果第一项不匹配。你只知道你没有一个匹配,如果你的循环没有找到一个完成,所以尝试这样的事情,而不是:

For Each Str As String In StrCorrect 
    If StrComp(Str, userinput, CompareMethod.Text).ToString = 0 Then 
     MsgBox("Found" & userinput) 
     Return 
    End If 
Next 

MsgBox("incorrect word") 

这将只显示“不正确的字:”如果项目的所有您的列表第一次测试失败。

+0

谢谢你,这个答案做到了! – ReCeSSiVE 2013-04-25 15:52:41

为什么STRCOMP写?为什么不直接比较,如果你想精确匹配?

For Each Str As String In StrCorrect 
     If Str = Find Then 
      MessageBox.Show("Found :" & Str) 
     End If 
    Next 
+0

非常有用,但不能解决问题中提到的问题:“它只是认识到第一个单词“TIED”,同样值得注意的是,使用'='省略了可能需要的任何文化和区分大小写选项 - 对于这些操作使用'string'类的方法通常是更好的做法 – 2013-04-25 15:45:22

+0

它只是应该识别精确匹配而不是'ADVICE'从问题中看到这个'我希望它的字符串值只接受相等的值。' – 2013-04-25 15:45:57

我会用一个for循环,像

For i As Integer = 0 To StrCorrect.Length - 1 
     If StrCorrect(i) = Find Then 
      MsgBox("Found" & Find) 
      Return 
     'End if 

     'The else statement simply alerting that it didnt find the right word on this iteration 
     'The else can be removed if you dont want this alert 
     Else 
      MsgBox("incorrect word") 
      'Return 
     End If 
Next 
+0

这根本不会改变问题的结果 – 2013-04-25 15:46:50

+0

它循环遍历ENTIRE数组,MsgBox表示不正确的单词只是提醒...一旦它找到合适的单词就会停止... – tymeJV 2013-04-25 15:47:56

尝试像下面,它会帮助你...

样品:

Dim result As String() = Array.FindAll(StrCorrect, Function(s) s.Equals(Find)) 
If (result.Length > 0) Then 
    MsgBox("Found : " & userinput) 
Else 
    MsgBox("incorrect word") 
End If 

全码:

Dim StrCorrect() As String = {"TIED", "VICE", "ICED", "DIVE", "DIET", "DATE", "CITE", "CAVE", "AIDE", "ACED", "CITED", "ACTED", "VACATE", "CATTIE", "ADVICE", "AVIATE", "ACTIVE", "VACATED", "DICTATE", "AVIATED", "ACTIVATE", "ACTIVATED"} 
Dim Find As String = userinput 
Dim result As String() = Array.FindAll(StrCorrect, Function(s) s.Equals(Find)) 
If (result.Length > 0) Then 
    MsgBox("Found : " & userinput) 
Else 
    MsgBox("incorrect word") 
End If