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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 22:58   #1
max1m9
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию Задача на обработку строк

Прелложите вариант решения следующей задачи:
Дана строка; найти наибольшее количество цифр, идущих в нем подряд.
max1m9 вне форума Ответить с цитированием
Старый 13.12.2009, 23:36   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Предлагаю
Разбиваем строку на символы
счетчик,временный счетчик обнуляем
В цикле проверяем по символьно на принадлежность к цифре.
Если цифра прибавляем к временному счетчику 1.
если следующий символ не цифра сравниваем показания счетчика и временного счетчика,если временный больше,присваиваем счетчику показания временного.Временный обнуляем.
После окончания цикла показания счетчика и есть максимальное количество цифр подряд в строке
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.12.2009, 00:06   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Function MaksDgt(s As String) As Integer
  Dim m As Integer, n As Integer
  m = 0
  For i = 48 To 57
    n = 0
    For c = 1 To Len(s)
      If Mid(s, c, 1) = Chr(i) Then n = n + 1 Else n = 0
      If n > m Then m = n
    Next
  Next
  MaksDgt = m
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.12.2009, 00:52   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Предложу свой вариант. Преимущество в скорости работы, особенно при очень длинных строках, можно научить искать не только целые числа.
Код:
Function MaxDigits(StringWithNumbers As String) As Integer
  Dim oRegExp As Object 'Объект для работы с регулярными выражениями
  Dim oMatch As Object 'Найденное выражение
  Dim oMatches As Object 'Коллекция найденных выражений
  Set oRegExp = CreateObject("VBScript.RegExp")
  Dim MaxNum As String
  oRegExp.Pattern = "\d{1,}"
  oRegExp.Global = True
  Set oMatches = oRegExp.Execute(StringWithNumbers)
  'Перебираем все найденные цифры и сравниваем длину
  For Each oMatch In oMatches
    If Len(oMatch.Value) > Len(MaxNum) Then
      MaxNum = oMatch.Value
    End If
  Next
  MaxDigits = Len(MaxNum)
  Set oRegExp = Nothing: Set oMatch = Nothing: Set oMatches = Nothing
End Function
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 14.12.2009 в 00:57.
viter.alex вне форума Ответить с цитированием
Старый 16.12.2009, 11:20   #5
max1m9
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

Взял за основу вариант IgorGo,немного пределал(мне надо через кнопку и textboxы)но почему то он пишет постоянно 0.Подозреваю,что неправильно что-то с if. Подскажите,что надо поменять:

Private Sub CommandButton1_Click()
Dim s As String
Dim m As Integer, n As Integer
TextBox1.Value = s
m = 0
For i = 48 To 57
n = 0
For c = 1 To Len(s)
If Mid(s, c, 1) = Chr(i) Then n = n + 1 Else n = 0
If n > m Then m = n
Next
Next
TextBox2.Value = m
End Sub
max1m9 вне форума Ответить с цитированием
Старый 16.12.2009, 11:43   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Ну, не захотел мой вариант, то тогда так:
Код:
Private Sub CommandButton1_Click()
  Dim m As Integer 'временный счётчик цифр
  Dim n As Integer 'максимальное количество цифр
  Dim i As Integer 'счётчик букв в строке
  Dim s As String 'строка с цифрами
  
  s = TextBox1.Text
  For i = 1 To Len(s)
    If IsNumeric(Mid(s, i, 1)) Then 'Если очередной знак в строке является цифрой
      m = m + 1 'Увеличиваем значение счетчика
    Else 'Если не является цифрой
      If m > n Then 'если значение временного счётчика больше максимального количества
        n = m 'переписываем его в максимальное количество
      End If
      m = 0 'сбрасываем временный счетчик
    End If
  Next
  Debug.Print s
  Debug.Print n
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.12.2009, 10:19   #7
max1m9
 
Регистрация: 13.12.2009
Сообщений: 6
По умолчанию

Спасибо большое,очень помогли.
max1m9 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) Yaro Помощь студентам 2 12.11.2009 12:55
Задача по замене строк motorway PHP 3 06.07.2009 23:58
задача на обработку строк и простейших структур данных LyaLyaLya Помощь студентам 2 19.12.2008 01:41
задача на массив строк hijack Помощь студентам 0 26.11.2007 23:10