1 / 1 / 0
Регистрация: 27.12.2014
Сообщений: 25

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

21.02.2015, 21:03. Показов 1622. Ответов 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) a(i)=b(i) 3)...

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

Решение

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

Решение

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

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  [ТС]
Цитата Сообщение от chumich Посмотреть сообщение
пора уже сначала радовать нас своими смелыми, пусть даже неправильными, решениями
Ну вообще-то во многих темах ,что я создавал я просил лишь дополнить программу или найти в ней ошибку. И последние две темы со строками не исключение.
0
3942 / 2335 / 790
Регистрация: 02.11.2012
Сообщений: 6,204
21.02.2015, 22:41
Catstail, вопрос для общего развития.
почему не использовали
Code
1
sym$ Like "[A-Za-z]"
как бы букв меньше и делает тоже самое.
0
6173 / 939 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
22.02.2015, 08:34
В коде Catstail в 4й строке лучше записать
Visual Basic
1
For i% = 1 To Len(S) + 1
иначе если подстрока из букв максимальной длины находится в конце текстовой строки, то она не будет определяться, нужно делать дополнительную проверку после завершения цикла.

ну и Like короче, чем 4 сравнения
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37897 / 20963 / 4294
Регистрация: 12.02.2012
Сообщений: 34,483
Записей в блоге: 14
22.02.2015, 10:42
Цитата Сообщение от 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
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
22.02.2015, 11:43
Цитата Сообщение от Catstail Посмотреть сообщение
If UCase$(sym$) <> LCase$(sym$) Then
Интересный способ! С т.з. быстродействия наверно лучше преобразовать всю строку в Ucase и Lcase, а потом сравнивать посимвольно.
1
1 / 1 / 0
Регистрация: 27.12.2014
Сообщений: 25
22.02.2015, 12:52  [ТС]
Подскажите пожалуйста как переменной max присвоить один из отрезков повторяющихся букв а потом сравнивать с другими.То есть первое что будет присвоено max это один из отрезков а не
Цитата Сообщение от Catstail Посмотреть сообщение
Max$ = ""
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37897 / 20963 / 4294
Регистрация: 12.02.2012
Сообщений: 34,483
Записей в блоге: 14
22.02.2015, 14:13
Чайник_Валера, в моем алгоритме так и происходит. Первый же отрезок букв будет на данный момент максимальным.
0
6173 / 939 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
23.02.2015, 09:02
Цитата Сообщение от Казанский Посмотреть сообщение
Интересный способ! С т.з. быстродействия наверно лучше преобразовать всю строку в 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
 Аватар для Catstail
37897 / 20963 / 4294
Регистрация: 12.02.2012
Сообщений: 34,483
Записей в блоге: 14
23.02.2015, 09:45
И без тестирования понятно, что Like быстрее. Один вызов.
0
Модератор
10032 / 3879 / 882
Регистрация: 22.02.2013
Сообщений: 5,824
Записей в блоге: 78
23.02.2015, 10:42
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 / 939 / 310
Регистрация: 25.02.2011
Сообщений: 1,373
Записей в блоге: 1
23.02.2015, 10:58
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2015, 10:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
Verilog и интеллектуальная собственность - "глазами" обученной LM модели.
Hrethgir 17.04.2025
В сети встречаются участники, заявляющие что код на Verilog ни о чём не говорит. Но вот патентная практика на самом деле показывает обратное ими утверждаемому. То-есть код на Verilog включают в. . .
Свап-файл дополнительно к разделу (если вдруг не хватает или не создан)
jigi33 17.04.2025
ПОДКЛЮЧЕНИЕ ДОПОЛНИТЕЛЬНОГО SWAP ПРОСТРАНСТВА, Т. О. , РАСШИРЕНИЕ ЕГО РАЗМЕРА В Linux можно использовать как раздел подкачки (swap), так и файл подкачки (swap-файл). Чтобы создать swap-файл вместо. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru