С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 27.12.2014
Сообщений: 25
1

Найти наибольшее количество подряд идущих букв

21.02.2015, 21:03. Показов 1601. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите алгоритм.Например наибольшее количество подряд идущих букв.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2015, 21:03
Ответы с готовыми решениями:

Подсчитать наибольшее количество идущих подряд пробелов(или любого другого символа)
Подсчитать наибольшее количество идущих подряд пробелов(или любого другого символа)

В символьной строке есть цепочки подряд идущих цифр. Найти наибольшее и наименьшее числа, составленные из этих цепочек
В символьной строке есть цепочки подряд идущих цифр. Найти наибольшее и наименьшее числа,...

Подсчитать наибольшее число одинаковых идущих подряд элементов в массиве
1.даны два массива одинаковой размерности a(n),b(n) Определить кол-во элементов 1) a(i)>b(i) 2)...

Подсчитать самую длинную последовательность подряд идущих букв а
Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а. Пример: aaaaa...

14
3927 / 2324 / 786
Регистрация: 02.11.2012
Сообщений: 6,175
21.02.2015, 21:53 2
вариант:
вводим две переменные n и m
проверяем каждый символ. если символ буква то n=n+1, иначе проверяем если n>m то m=n: n=0
как то так, может не понятно - я не спец по объяснениям.
0
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
21.02.2015, 21:57 3
Лучший ответ Сообщение было отмечено Чайник_Валера как решение

Решение

Чайник_Валера, это уже ваша третья тема по работе со строками (+ в Паскале) - пора уже сначала радовать нас своими смелыми, пусть даже неправильными, решениями
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37423 / 20795 / 4280
Регистрация: 12.02.2012
Сообщений: 34,208
Записей в блоге: 14
21.02.2015, 22:14 4
Лучший ответ Сообщение было отмечено Чайник_Валера как решение

Решение

Вот функция, которая выделяет из строки самую длинную последовательность идущих подряд латинских букв.
Для русских сделай сам.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function LongSeqLett(S As String) As String
   Max$ = ""
   Curr$ = ""
   For i% = 1 To Len(S)
        sym$ = Mid$(S, i%, 1)
        If (sym$ >= "a" And sym$ <= "z") Or (sym$ >= "A" And sym$ <= "Z") Then
           Curr$ = Curr$ + sym$
        Else
           If Len(Curr$) > Len(Max$) Then Max$ = Curr$
           Curr$ = ""
        End If
    Next i%
    LongSeqLett = Max$
End Function
 
Sub Test()
    A$ = "aaa565#avqqqqqqn2nmn^cvcvvc#ww"
    Debug.Print LongSeqLett(A$)
End Sub
1
1 / 1 / 0
Регистрация: 27.12.2014
Сообщений: 25
21.02.2015, 22:18  [ТС] 5
Цитата Сообщение от chumich Посмотреть сообщение
пора уже сначала радовать нас своими смелыми, пусть даже неправильными, решениями
Ну вообще-то во многих темах ,что я создавал я просил лишь дополнить программу или найти в ней ошибку. И последние две темы со строками не исключение.
0
3927 / 2324 / 786
Регистрация: 02.11.2012
Сообщений: 6,175
21.02.2015, 22:41 6
Catstail, вопрос для общего развития.
почему не использовали
Код
sym$ Like "[A-Za-z]"
как бы букв меньше и делает тоже самое.
0
6173 / 938 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
22.02.2015, 08:34 7
В коде Catstail в 4й строке лучше записать
Visual Basic
1
For i% = 1 To Len(S) + 1
иначе если подстрока из букв максимальной длины находится в конце текстовой строки, то она не будет определяться, нужно делать дополнительную проверку после завершения цикла.

ну и Like короче, чем 4 сравнения
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37423 / 20795 / 4280
Регистрация: 12.02.2012
Сообщений: 34,208
Записей в блоге: 14
22.02.2015, 10:42 8
Цитата Сообщение от Vlad999 Посмотреть сообщение
Catstail, вопрос для общего развития.
- да просто не подумал...

Цитата Сообщение от m-ch Посмотреть сообщение
в 4й строке лучше записать
- да, с концевой строкой есть проблема. И этот способ, пожалуй, самый рациональный. Хотя я бы реализовал более громоздко:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Function LongSeqLett(ByVal S As String) As String
   Max$ = ""
   Curr$ = ""
   S = S & " "
   For i% = 1 To Len(S)
        sym$ = Mid$(S, i%, 1)
        If UCase$(sym$) <> LCase$(sym$) Then
           Curr$ = Curr$ + sym$
        Else
           If Len(Curr$) > Len(Max$) Then Max$ = Curr$
           Curr$ = ""
        End If
    Next i%
    LongSeqLett = Max$
End Function
1
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
22.02.2015, 11:43 9
Цитата Сообщение от Catstail Посмотреть сообщение
If UCase$(sym$) <> LCase$(sym$) Then
Интересный способ! С т.з. быстродействия наверно лучше преобразовать всю строку в Ucase и Lcase, а потом сравнивать посимвольно.
1
1 / 1 / 0
Регистрация: 27.12.2014
Сообщений: 25
22.02.2015, 12:52  [ТС] 10
Подскажите пожалуйста как переменной max присвоить один из отрезков повторяющихся букв а потом сравнивать с другими.То есть первое что будет присвоено max это один из отрезков а не
Цитата Сообщение от Catstail Посмотреть сообщение
Max$ = ""
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37423 / 20795 / 4280
Регистрация: 12.02.2012
Сообщений: 34,208
Записей в блоге: 14
22.02.2015, 14:13 11
Чайник_Валера, в моем алгоритме так и происходит. Первый же отрезок букв будет на данный момент максимальным.
0
6173 / 938 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
23.02.2015, 09:02 12
Цитата Сообщение от Казанский Посмотреть сообщение
Интересный способ! С т.з. быстродействия наверно лучше преобразовать всю строку в Ucase и Lcase
Интересно было бы потестировать на скорость, что быстрее: Like, сравнение символов, UCase/LCase, или Select Case Asc() (как сделано здесь)?

Добавлено через 12 минут
Пример через Select Case
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function LongSeqLetter$(ByVal txt$)
    Dim m$, i&, k&, l&, mxk&, mxl&
    txt = txt & " "
    For i = 1 To Len(txt)
        Select Case Asc(Mid$(txt, i, 1))
        Case 65 To 90, 97 To 122, 168, 184, 192 To 255: l = l + 1
        Case Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i
        End Select
    Next i
    LongSeqLetter = Mid$(txt, mxk + 1, mxl)
End Function
Добавлено через 44 минуты
Протестировал, Like оказалось быстрее всех, Select Case Asc() немного уступает
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub test()
    Const n& = 1000000
    Const sTxt$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя .,!?"
    Dim i&, txt$
    txt = Space(n)
    Randomize
    For i = 1 To n
        Mid$(txt, i, 1) = Mid$(sTxt, Int(Rnd * Len(sTxt) + 1), 1)
    Next i
    
    t = Timer
    Debug.Print LongSeqLetterULCase(txt), Timer - t
    t = Timer
    Debug.Print LongSeqLetterLike(txt), Timer - t
    t = Timer
    Debug.Print LongSeqLetterSelectCase(txt), Timer - t
    
End Sub
 
Function LongSeqLetterULCase$(txt$)
    Dim i&, k&, l&, mxk&, mxl&, Utxt$, Ltxt$
    Utxt = UCase$(txt)
    Ltxt = LCase$(txt)
    For i = 1 To Len(txt) + 1
        If Mid$(Utxt, i, 1) <> Mid$(Ltxt, i, 1) Then
           l = l + 1
        Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i
        End If
    Next i
    LongSeqLetterULCase = Mid$(txt, mxk + 1, mxl)
End Function
 
Function LongSeqLetterLike$(txt$)
    Dim i&, k&, l&, mxk&, mxl&
    For i = 1 To Len(txt) + 1
        If Mid$(txt, i, 1) Like "[A-Za-zА-яЁё]" Then
           l = l + 1
        Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i
        End If
    Next i
    LongSeqLetterLike = Mid$(txt, mxk + 1, mxl)
End Function
 
Function LongSeqLetterSelectCase$(ByVal txt$)
    Dim i&, k&, l&, mxk&, mxl&
    txt = txt & " "
    For i = 1 To Len(txt)
        Select Case Asc(Mid$(txt, i, 1))
        Case 65 To 90, 97 To 122, 168, 184, 192 To 255: l = l + 1
        Case Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i
        End Select
    Next i
    LongSeqLetterSelectCase = Mid$(txt, mxk + 1, mxl)
End Function
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37423 / 20795 / 4280
Регистрация: 12.02.2012
Сообщений: 34,208
Записей в блоге: 14
23.02.2015, 09:45 13
И без тестирования понятно, что Like быстрее. Один вызов.
0
Модератор
9979 / 3825 / 879
Регистрация: 22.02.2013
Сообщений: 5,705
Записей в блоге: 78
23.02.2015, 10:42 14
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function LongSeqLetterArray$(txt$)
    Dim i&, k&, l&, mxk&, mxl&, atxt() As Byte
    atxt = StrConv(txt, vbFromUnicode)
    For i = 0 To UBound(atxt)
        Select Case atxt(i)
        Case 65 To 90, 97 To 122, 168, 184, 192 To 255: l = l + 1
        Case Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i
        End Select
    Next i
    LongSeqLetterArray$ = Mid$(txt, mxk + 2, mxl)
End Function
Это скорость, алгоритм не проверял.
1
6173 / 938 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
23.02.2015, 10:58 15
Цитата Сообщение от The trick Посмотреть сообщение
StrConv(txt, vbFromUnicode)
Была мысль по переводу текстовой строки в байтовый массив для ускорения, получилось почти в 2 раза быстрее чем Like, но при данном переводе у меня были проблемы с кириллицей, не знал про StrConv()

для правильности обработки последней буквенной подстроки в конце текста лучше записать 3-ю строчку
Visual Basic
1
atxt = StrConv(txt & " ", vbFromUnicode)
а также еще пара поправок:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function LongSeqLetterArray$(txt$)
    Dim i&, k&, l&, mxk&, mxl&, atxt() As Byte
    atxt = StrConv(txt & " ", vbFromUnicode)
    For i = 0 To UBound(atxt)
        Select Case atxt(i)
        Case 65 To 90, 97 To 122, 168, 184, 192 To 255: l = l + 1
        Case Else
            If l > mxl Then mxk = k: mxl = l
            l = 0
            k = i + 1
        End Select
    Next i
    LongSeqLetterArray = Mid$(txt, mxk + 1, mxl)
End Function
0
23.02.2015, 10:58
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2015, 10:58
Помогаю со студенческими работами здесь

В символьной строке есть цепочки подряд идущих цифр. найдите наибольшее и наименьшее числа, составленные из этих цепочек.
Вот есть закая задача, помогите, пожайлуста! В символьной строке есть цепочки подряд идущих...

Подсчитать количество подряд идущих пробелов в первой ячейке
Помогите , посчитать количество подряд идущих пробелов в ячейке 1.1

Определите максимальное количество подряд идущих положительных элементов последовательности
Здравствуйте. Я на этом сайте новичок. Если этот вопрос уже задавался ранее, то не ругайте сильно....

Определить количество подряд идущих четных чисел, сумма которых больше введенного числа
Определить сколько натуральных подряд идущих четных чисел нужно сложить (найти минимальное число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru