2017-02-02 14 views
0

Я являюсь tyring, чтобы сделать программу, которая принимает предложение как входную информацию, а затем разбивает на нее разные слова. Теперь он сравнивает слова, и если слово повторяется, то дает сообщение, иначе оно не дает совпадения. Но при выполнении этого не отображается MsgBox.Сопоставьте слова, представленные в строке. Если слова повторяются в предложении, они дают сообщение «Матч», иначе выдается сообщение «Нет совпадения»

Это сценарий, который я написал:

Dim sent 
Dim i 
Dim j 
Dim k 
sent = "Its a good day but every day is a good day" 
words = Array(Split(sent)) 
For i = LBound(words) To UBound(words)-1 
    For j = LBound(words)+1 To UBound(words) 
    k = StrComp(words(i), words(j)) 
    If k=0 Then 
     MsgBox ("Match") 
    Else 
     MsgBox ("No Match") 
    End If 
    Next 
Next 
+0

Этот вопрос 'слово = слова = Array (Split (пересылаются))' строка неверна, 'Split (...)' возвращает 'Array', поэтому нет необходимости вставлять ее в другую, используя' Array (...) ', на данный момент' UBound (words) 'будет возвращать' 0'. Измените эту строку на 'words = Split (sent)'. – Lankymart

ответ

2

Цикл For никогда не будет работать, потому что UBound(words) вернется 0.

Это происходит потому, что функция Split() возвращает Array поэтому нет никакой необходимости в дополнительной Array() вызова, который заканчивает тем, что дает вам один элемент массива, содержащий другой массив.

Решение изменить

words = Array(Split(sent)) 

в

words = Split(sent) 

Это будет исправить вашу исходную задачу, но есть и другие проблемы, связанные с кодом вам нужно будет обратиться, прежде чем он работает правильно.

+0

Спасибо, я получил его для работы .... используя приведенный ниже код ... Большое спасибо sent = "Хороший день, но каждый день хороший день" msgbox ("ОК") k = split (пересылаются) MsgBox ("Ok") для I = LBound (л) UBOUND (к) -1 При J = LBound (к) +1 до UBOUND (к) \t Если J> я тогда \t \t ч = StrComp (к (I), к (к)) \t \t MsgBox (к (я) и К (к)) \t \t MsgBox (ч) \t Конец Если Следующая next – Sunny

+0

@ Сунни рад, что вы его работаете, но вам действительно стоит рассмотреть [подход Ekkehard.Horner] (http://stackoverflow.com/a/42007074/692942) для гораздо более простого и чистого механизма. – Lankymart

+0

Yip благодарит Lankymart .... yeahi не мог получить его apporach, поскольку я не знал о словарном объекте. Я узнал и попробовал это сейчас. Еще раз спасибо – Sunny

0

Инструмент VBScript для классификации/подсчета токенов типов/распознавания является Dictionary.

Демо:

Option Explicit 

Dim a : a = Split("Its a good day but every day is a good day") 
Dim d : Set d = CreateObject("Scripting.Dictionary") 
Dim w 
For Each w In a 
    d(w) = d(w) + 1 
    If 1 < d(w) Then 
     WScript.Echo "more than one " & w & " - could 'Exit For'" 
    End If 
Next 
For Each w In d.Keys() 
    WScript.Echo w, d(w) 
Next 

(! Внешний вид ма, без вложенных циклов)

выход:

cscript 42004404.vbs 
more than one day - could 'Exit For' 
more than one a - could 'Exit For' 
more than one good - could 'Exit For' 
more than one day - could 'Exit For' 
Its 1 
a 2 
good 2 
day 3 
but 1 
every 1 
is 1 
+0

Лучшее решение, но оно не отвечает на начальный вопрос, я мог бы предоставить полное решение, но я объяснял, почему у них была проблема, что они сделали. – Lankymart

+0

спасибо Ekkehard.Horner. Мне нужно было изучить объект словаря, чтобы понять ваш метод.Но я сделал что-то новое, спасибо большое. – Sunny