Страница: 1 |
Страница: 1 |
Вопрос: Проблемы со скобками
Добавлено: 24.12.05 19:23
Автор вопроса: RavenX
люди помогите...ни как не пойму...есть выражение например 2+(4-1) надо проверить на правильность скобки. Я знаю что надо подсчитать количество скобки вида ( и скобки вида ) и сравнить их число...
Я также понимаю, что надо проверять строку на наличие сочетаний знак( и сочетаний )знак. Так как выражение 2(-4-1) можно рассматривать как неправильное расположение скобки вида ( , не сотря на, то, что количество скобок вида ( и вида ) равное. А как быть с выражением вида 2+(+(3+4)) вообще не знаю (((((
Как это реализовать в коде? Может кто знает…очень нужно(((
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 25.12.05 06:00
посимвольный цикл, если на любом шаге кол-во открытых превышает кол-во закрытых - выражение не правельное, также проверить повтор знаков, т.е. если был "+", то слейдущие могут буть только цифры и "" "", знак быть неможет. И походу всё...
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 25.12.05 07:22
Еще после открывающейся скобки может быть только "-" или цифра, после знака может идти только "", но никак не ""
Номер ответа: 3
Автор ответа:
RavenX
Вопросов: 1
Ответов: 1
Профиль | | #3
Добавлено: 25.12.05 14:47
Эээээээ…….ну чисто теоретически я понимаю, как это реализовать в коде не знаю.
Вот то, что я сделал…тут только сравнивается количество скобок. Для работы кода надо кнопку и два текстовых поля.
Private Sub Command1_Click()
s$ = Text1.Text
k% = 0
z% = 0
For i = 1 To Len(s)
If Mid(s, i, 1) = "" Then
k = k + 1
End If
If Mid(s, i, 1) = "" Then
z = z + 1
End If
If z = k Then
Text2.Text = "верно"
End If
If z > k Or z < k Then
Text2.Text = "не верно"
End If
Next i
End Sub
Есть траблы ещё с одной прогой…суть её в том, что бы найти количество слов и цифр (не чисел) в строке. У меня ищет количество чисел, слова тоже ищет (но числа тоже учитывает как слово…прошу заметить не цифры, а числа)
Private Sub Command1_Click()
Dim varArray As Variant
Dim a As String
Dim b As Integer
Dim LAT, K
Dim c As Integer
Dim vu As Integer
a = Text1.Text
varArray = Split
Text2.Text = (UBound(varArray) + 1)
c = Text2.Text
' при вводе символов проверяет по кодовой таблице
For i = 1 To Len(Text1.Text)
K = Asc(Mid(Text1.Text, i, 1))
If (K > 47 And K < 58) Then
LAT = LAT + 1
End If
Next i
vu = LAT
c = c - vu
' вывод результатов после ввода любого символа
Text3.Text = "цифр = " & Str(LAT) & vbCrLf & "слов = " & Str(c)
End Sub
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 26.12.05 18:38
Ну я знаю вообще то, но это нужно парсер делать. Для скобок рекурсивная процедура нужна, ну и грамматику нужно построить соответствующую. Вобщем если правильную технологию использовать, то там довольно сложно получится. Простым перебором тоже можно, но уже не вспомню как.