Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2009, 16:59   #1
Berckyt
 
Регистрация: 15.03.2009
Сообщений: 5
По умолчанию Vba определить количество вхождения строки S1 в строку S2

Задачу нужно решить двумя способами:
1) С использованием любых функций для работы со строками
2)С использованием только функций Mid, Len, Asc, Chr
вот первый код
Код:
Private Sub CommandButton1_Click()
Dim s1, s2 As String
s1 = TextBox1.Text
s2 = TextBox2.Text
MsgBox (InStr(1, s2, s1))
End Sub
Но тут только находится номер, с какого s1 входит в s2, как сделать подсчет количества вхождений?
Во втором коде ступор

Последний раз редактировалось Berckyt; 15.03.2009 в 18:00.
Berckyt вне форума Ответить с цитированием
Старый 15.03.2009, 19:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

прежде всего, вот неточность. Объявлять надо так:
Цитата:
Код:
Dim s1 As String, s2 As String
иначе переменная s1 будет типа Variant

во-вторых, решить данную задачу можно кучей способов...
вот, например, два варианта решения ПЕРВОГО задания:

Код:
Dim s1 As String, s2 As String
Dim Cnt As Integer
s1 = "es"
s2 = "vest is best fore.st"
Cnt = 0
While InStr(1, s2, s1) > 0
 Cnt = Cnt + 1
 s2 = Mid(s2, InStr(1, s2, s1) + Len(s1))
 Cells(Cnt, 1) = s2
Wend
MsgBox "Count = " & Str(Cnt)
Код:
Dim s1 As String, s2 As String
Dim PrevPos As Integer, Cnt As Integer
s1 = "es"
s2 = "vest is best forest"
PrevPos = 1
Cnt = 0
While InStr(PrevPos, s2, s1) > 0
 Cnt = Cnt + 1
 PrevPos = InStr(PrevPos, s2, s1) + 1
Wend
MsgBox "Count = " & Str(Cnt)
добавлено.
решение второй задачи:
Код:
Dim s1 As String, s2 As String
Dim i As Integer, Cnt As Integer
 s1 = "es"
 s2 = "vest is best forest"
 i = 1
 Cnt = 0
 For i = 1 To Len(s2) - Len(s1) + 1
   If Mid(s2, i, Len(s1)) = s1 Then Cnt = Cnt + 1
 Next i
 MsgBox "Count = " & Str(Cnt)

Последний раз редактировалось Serge_Bliznykov; 15.03.2009 в 19:31.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2009, 18:27   #3
HighStar
 
Регистрация: 13.04.2009
Сообщений: 5
По умолчанию

Ещё один вариант - правда, красиво!
Код:
Dim s1 As String, s2 As String
 s1 = "es"
 s2 = "vest is best forest"
 MsgBox "Count = " & UBound(Split(s2, s1))
HighStar вне форума Ответить с цитированием
Старый 13.04.2009, 22:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

HighStar, согласен. Красиво!...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2011, 20:24   #5
belserge
Новичок
Джуниор
 
Регистрация: 08.06.2011
Сообщений: 1
Хорошо

HighStar Ещё один вариант - правда, красиво!
очень красиво.

Последний раз редактировалось belserge; 17.08.2011 в 20:25. Причина: тэги
belserge вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
имя может встречаться несколько раз, как используя pos найти все вхождения имени в строку milton Паскаль, Turbo Pascal, PascalABC.NET 2 09.12.2008 22:34
Определить строку на численность. Небесный Общие вопросы Delphi 9 11.11.2008 08:25
Задача на строки и вхождения Mrs.BlondieProger) Паскаль, Turbo Pascal, PascalABC.NET 5 25.06.2008 21:15
Возможно ли определить количество акаунтов Windows bayern JavaScript, Ajax 1 22.09.2007 22:46