Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите, Проверить скобки!!! 
:(
    Опции темы
Гость_Sergei
Дата 14.12.2005, 23:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите проверить, открыта ли скобка!
Необходими проверить в TextBoxe после нажатия определенной кнопки закрыта ли вторая скобка (при условии, конечно, что одна открыта) и их кол-во равно в данном тексте...
  Вверх
cardinal
Дата 15.12.2005, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Ну и в чем проблема?
Вариант первый: посчитали одни и вторые скобки, если их кол-во одинаковое, то все Ок. см. функции Left, Mid, Right, InStr и т.д.
Вариант второй: написать парсер, что посложнее (и возможно нафиг не нужно в данной ситуации smile).

Начинай писать код, а там разберемся...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Akina
Дата 15.12.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Код

dim temp() as string
dim tmp as string
dim i as integer
temp = split(textbox.text,chr(34))
tmp = ""
for i = 0 to ubound(temp) step 2
   tmp=tmp & temp(i)
next i
if ubound(split(tmp,"(")) <> ubound(split(tmp,")")) then
   debug.print "Количество скобок не совпадает"
end if



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Гость_Sergei
Дата 15.12.2005, 23:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ты уверен, что chr(34)!!! Если да, то поясни
И еще вопрос: Не мог бы ты так сделать, чтобы в случае нарушения баланас скобок, типа Например, ))(( или )(() и т.д.) Это как-нить сигнализировалось, заранее благодарю!!!
  Вверх
cardinal
Дата 16.12.2005, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
типа Например, ))(( или )(() и т.д.) Это как-нить сигнализировалось, заранее благодарю!!!

Модератор: Нет, извиняюсь, а самому пораскинуть мозгами лень? Тут тебе помогут сделать то, что ты не можешь, а если ты сам делать ничего не хочешь, то никто за тебя все делать не будет... Я еще не видел ни одной строчки твоего кода!
Цитата
Это как-нить сигнализировалось

см. функция Beep.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Guest
Дата 17.12.2005, 13:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот мой вариант кода, я его практически дописал, но как выяснилось не очень правильно...Исправьте, пожалуйста!!!


Private Sub cmd1_Click()
Dim skobka1, skobka2, s1, s2
Dim stroka$
Dim parn%, a%, k%, i%
stroka = txt1.Text
skobka1 = Split(stroka, "(")
skobka2 = Split(stroka, ")")

If UBound(skobka1) = UBound(skobka2) Then
txt1.ForeColor = &H0&
Else
txt1.ForeColor = &HFF&
End If
For i = 1 To Len(stroka)
If Mid(stroka, i, 1) = ")" Or Mid(stroka, i, 1) = "(" Then a = a + 1
Next i
For i = 1 To Len(stroka)
s1 = Mid(stroka, i, 1)
If s1 = "(" Then
For k = i + 1 To Len(stroka)
s2 = Mid(stroka, k, 1)
If s2 = ")" Then parn = parn + 1
Next k
End If
Next i
txt1.Text = a
If s1 = parn Then
MsgBox "Скобки расставлены верно"
Else: MsgBox "Сбалансированность скобок нарушена"
End If
End Sub
  Вверх
Guest
Дата 17.12.2005, 14:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

Dim iCount As Integer

Private Sub cmd1_Click()
Dim i As Integer
Dim Stroka As String
Dim str1 As String
Stroka = txt1.Text
pic1.Cls
iCount = 0
i = 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then
MsgBox "Zakryvayushaya skobka ne naydena"
Exit Sub
End If
ElseIf str1 = ")" Then
MsgBox "Otkrivayushaya skobka ne naydena"
Exit Sub
End If
i = i + 1
Loop
End Sub

Function Skobka(Stroka As String, iCurPoz As Integer) As Integer
Dim i As Integer
Dim str1 As String
i = iCurPoz + 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then Exit Function
ElseIf str1 = ")" Then
Skobka = i
iCount = iCount + 1
pic1.Print iCount; ". "; Mid(Stroka, iCurPoz, i - iCurPoz + 1)
Exit Function
End If
i = i + 1
Loop
End Function


Цитата
Не мог бы ты так сделать, чтобы в случае нарушения баланас скобок, типа Например, ))(( или )(() и т.д.) Это как-нить сигнализировалось, заранее благодарю!!!


А осталные сам проверяй ...
  Вверх
Guest
Дата 17.12.2005, 14:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В написанном мною коде почему-то не предусматривается вариант, типа - ()) или например, __)[code=vb]


Private Sub cmd1_Click()
Dim stroka$
Dim k%, i%, j
stroka = txt1.Text
k = 0
For i = 1 To Len(stroka)
If Mid(stroka, i, 1) = "(" Then k = k + 1
If Mid(stroka, i, 1) = ")" Then k = k - 1
If k < 0 Then MsgBox "Баланск скобок нарушен!"
Exit For
Next
  Вверх
coderx
Дата 17.12.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.9.2005

Репутация: нет
Всего: нет



К мою рекурсивную функцию добав некоторые коды, который обработавшую данные и декларацию Beep в началу модула:

Код

Private Declare Function Beep Lib "kernel32" _
        (ByVal dwFreq As Long, _
        ByVal dwDuration As Long) As Long


Код

For i = 1 To 2
Beep 800 + i * 100, 100
Next

Добавлено @ 14:41
Цитата(Guest @ 17.12.2005, 14:28)
If k < 0 Then MsgBox "Баланск скобок нарушен!"
Exit For

Постав мессаг в следующую строку и после Exit For постав End If

В твоем коде цикл работает только один раз ...
PM MAIL   Вверх
СПАСИБО!!!
  Дата 17.12.2005, 14:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 17.12.2005, 14:20)
Код

Dim iCount As Integer

Private Sub cmd1_Click()
Dim i As Integer
Dim Stroka As String
Dim str1 As String
Stroka = txt1.Text
pic1.Cls
iCount = 0
i = 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then
MsgBox "Zakryvayushaya skobka ne naydena"
Exit Sub
End If
ElseIf str1 = ")" Then
MsgBox "Otkrivayushaya skobka ne naydena"
Exit Sub
End If
i = i + 1
Loop
End Sub

Function Skobka(Stroka As String, iCurPoz As Integer) As Integer
Dim i As Integer
Dim str1 As String
i = iCurPoz + 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then Exit Function
ElseIf str1 = ")" Then
Skobka = i
iCount = iCount + 1
pic1.Print iCount; ". "; Mid(Stroka, iCurPoz, i - iCurPoz + 1)
Exit Function
End If
i = i + 1
Loop
End Function


Цитата
Не мог бы ты так сделать, чтобы в случае нарушения баланас скобок, типа Например, ))(( или )(() и т.д.) Это как-нить сигнализировалось, заранее благодарю!!!


А осталные сам проверяй ...

Большое спасибо за присланный код! Буду вечно благодарен тебе!
  Вверх
Akina
Дата 17.12.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Что будет, если

txt1.Text = "Этот символ - ""("" - называется скобкой."

А? я не зря вырезаю литералы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Guest
  Дата 17.12.2005, 15:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 17.12.2005, 14:20)
Код

Dim iCount As Integer

Private Sub cmd1_Click()
Dim i As Integer
Dim Stroka As String
Dim str1 As String
Stroka = txt1.Text
pic1.Cls
iCount = 0
i = 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then
MsgBox "Zakryvayushaya skobka ne naydena"
Exit Sub
End If
ElseIf str1 = ")" Then
MsgBox "Otkrivayushaya skobka ne naydena"
Exit Sub
End If
i = i + 1
Loop
End Sub

Function Skobka(Stroka As String, iCurPoz As Integer) As Integer
Dim i As Integer
Dim str1 As String
i = iCurPoz + 1
Do While i <= Len(Stroka)
str1 = Mid(Stroka, i, 1)
If str1 = "(" Then
i = Skobka(Stroka, i)
If i = 0 Then Exit Function
ElseIf str1 = ")" Then
Skobka = i
iCount = iCount + 1
pic1.Print iCount; ". "; Mid(Stroka, iCurPoz, i - iCurPoz + 1)
Exit Function
End If
i = i + 1
Loop
End Function


Цитата
Не мог бы ты так сделать, чтобы в случае нарушения баланас скобок, типа Например, ))(( или )(() и т.д.) Это как-нить сигнализировалось, заранее благодарю!!!


А осталные сам проверяй ...

Можно пару комментариев к твоей проге.??? Зачем i = i + 1 в конце функции и зачем If i = 0 в каждой из в каждой процедуре???
  Вверх
coderx
Дата 17.12.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.9.2005

Репутация: нет
Всего: нет



Akina ты прав, но я не обратыл внимание на этого в свою коду. Но если так, возникают и другие проблемки:
1. Если текст в кавичках не один символ скобка и у него тоже есть некоторые скобки: они не проверяется.
2. И у моей коде тоже есть некоторые проблемы, он не проверяеть такой пример: (")(")

По моему, эта не очень сложная проблема. Его можно решить и с твоём кодом.
PM MAIL   Вверх
Exception
Дата 17.12.2005, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



coderx, если вы думаете, что писать с ошибками -- круто, вы глубоко заблуждаетесь...
Лично я из последнего поста ничего не понял.
По сабжу: имхо, проще найти парсер и не париться smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.