Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
lebr

Посчитать, сколько раз в строке встречается каждая цифра

10.01.2012, 13:24. Показов 6523. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ввести строку, посчитать, сколько раз в ней встречается каждая цифра, в ответе цифры расположить по возрастанию.
никак не получается сделать((
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2012, 13:24
Ответы с готовыми решениями:

Как ввести строку и посчитать, сколько раз в ней встречается каждая цифра
Ввести строку, посчитать, сколько раз в ней встречается каждая цифра, в ответе цифры расположить по возрастанию.

Определить, сколько раз в числе встречается максимальная цифра
Дано натуральное четырехзначное число. Определить, сколько раз в нем встречается максимальная цифра...... Нужно именно функцию на VB что...

Определить, сколько раз в числе встречается максимальная цифра
Дано натуральное четырехзначное число. Определить, сколько раз в нем встречается максимальная цифра! подскажите пожалуйста как записать...

8
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
10.01.2012, 15:33
Цитата Сообщение от lebr Посмотреть сообщение
в ответе цифры расположить по возрастанию
По возрастанию цифр или по возрастанию числа повторов?
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
10.01.2012, 15:52
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub main()
Dim S$
Dim a%(0 To 9)
Dim I%
S = InputBox("Введите строку")
For I = 1 To Len(S)
  If IsNumeric(Mid$(S, I, 1)) Then a(Mid$(S, I, 1)) = a(Mid$(S, I, 1)) + 1
Next I
S = "В строке " & S
For I = 0 To 9
  S = S & vbLf & I & " - " & a(I) & " раз"
Next I
MsgBox S
End Sub
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
10.01.2012, 16:02
Вот так?? --->
Миниатюры
Посчитать, сколько раз в строке встречается каждая цифра  
Вложения
Тип файла: rar db15.rar (12.6 Кб, 42 просмотров)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
10.01.2012, 16:29
Лучший ответ Сообщение было отмечено как решение

Решение

С сортировкой по повторам:
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
Sub lebr()
Dim s$, d$, i&, j&, k&
s = InputBox("Введите строку", , "https://www.cyberforum.ru/vba/thread425497.html#post2372642")
On Error Resume Next
With New Collection
    For i = 1 To Len(s)
        d = Mid$(s, i, 1)
        If IsNumeric(d) Then
            If .Count > 0 Then .Add Array(1, d), d, before:=1 Else .Add Array(1, d), d
            If Err Then
                Err.Clear
                j = .Item(d)(0) + 1
                .Remove d
                For k = 1 To .Count
                    If j <= .Item(k)(0) Then .Add Array(j, d), d, before:=k: Exit For
                Next
                If k > .Count Then .Add Array(j, d), d
            End If
        End If
    Next
    d = ""
    For i = 1 To .Count
        d = d & vbLf & .Item(i)(1) & vbTab & .Item(i)(0)
    Next
End With
MsgBox "В строке" & vbLf & s & vbLf & "Цифры" & vbTab & "Повторы" & d
End Sub
Добавлено через 17 минут
Покороче
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub lebr1()
Dim s$, d$, i&, j&, k&, m&
s = InputBox("Введите строку", , "https://www.cyberforum.ru/vba/thread425497.html#post2372642")
i = Len(s)
With New Collection
    For j = 0 To 9
        k = i - Len(Replace$(s, j, ""))
        If k Then
            For m = 1 To .Count
                If k <= .Item(m)(0) Then .Add Array(k, j), CStr(j), before:=m: Exit For
            Next
            If m > .Count Then .Add Array(k, j), CStr(j)
        End If
    Next
    For i = 1 To .Count
        d = d & vbLf & .Item(i)(1) & vbTab & .Item(i)(0)
    Next
End With
MsgBox "В строке" & vbLf & s & vbLf & "Цифры" & vbTab & "Повторы" & d
End Sub
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,321
10.01.2012, 18:36
количество цифирок 1 = длина строки - длина строки в которой 1 заменено на "" и т. д.
количество цифирок ...
количество цифирок ...
0
 Аватар для Aeliot
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
10.01.2012, 22:31
Как-то мне попалась
функция сортировки массивов
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Public Sub QuickSort( _
        ByRef arr() As Variant, _
        Optional numEls As Variant, _
        Optional descending As Boolean = False _
        )
    ' QuickSort an array of any type
    ' QuickSort is especially convenient with large arrays (>1,000
    ' items) that contains items in random order. Its performance
    ' quickly degrades if the array is already almost sorted. (There are
    ' variations of the QuickSort algorithm that work good with
    ' nearly-sorted arrays, though, but this routine doesn't use them.)
    '
    ' NUMELS is the index of the last item to be sorted, and is
    ' useful if the array is only partially filled.
    '
    ' Works with any kind of array, except UDTs and fixed-length
    ' strings, and including objects if your are sorting on their
    ' default property. String are sorted in case-sensitive mode.
    '
    ' You can write faster procedures if you modify the first two lines
    ' to account for a specific data type, eg.
    ' Sub QuickSortS(arr() As Single, Optional numEls As Variant,
    '  '     Optional descending As Boolean)
    '   Dim value As Single, temp As Single
    
    Dim value As String, temp As String
    Dim sP As Integer
    Dim leftStk(32) As Long, rightStk(32) As Long
    Dim leftNdx As Long, rightNdx As Long
    Dim i As Long, j As Long
    
    ' account for optional arguments
    If IsMissing(numEls) Then numEls = UBound(arr)
    ' init pointers
    leftNdx = LBound(arr)
    rightNdx = numEls
    ' init stack
    Dim asd As String
    asd = CStr(arr(1))
    sP = 1
    leftStk(sP) = leftNdx
    rightStk(sP) = rightNdx
    
    Do
        If rightNdx > leftNdx Then
            value = arr(rightNdx)
            i = leftNdx - 1
            j = rightNdx
            ' find the pivot item
            If descending Then
                Do
                    Do: i = i + 1: Loop Until arr(i) <= value
                    Do: j = j - 1: Loop Until j = leftNdx Or arr(j) >= value
                    temp = arr(i)
                    arr(i) = arr(j)
                    arr(j) = temp
                Loop Until j <= i
            Else
                Do
                    Do: i = i + 1: Loop Until arr(i) >= value
                    Do: j = j - 1: Loop Until j = leftNdx Or arr(j) <= value
                    temp = arr(i)
                    arr(i) = arr(j)
                    arr(j) = temp
                Loop Until j <= i
            End If
            ' swap found items
            temp = arr(j)
            arr(j) = arr(i)
            arr(i) = arr(rightNdx)
            arr(rightNdx) = temp
            ' push on the stack the pair of pointers that differ most
            sP = sP + 1
            If (i - leftNdx) > (rightNdx - i) Then
                leftStk(sP) = leftNdx
                rightStk(sP) = i - 1
                leftNdx = i + 1
            Else
                leftStk(sP) = i + 1
                rightStk(sP) = rightNdx
                rightNdx = i - 1
            End If
        Else
            ' pop a new pair of pointers off the stacks
            leftNdx = leftStk(sP)
            rightNdx = rightStk(sP)
            sP = sP - 1
            If sP = 0 Then Exit Do
        End If
    Loop
End Sub

С тех пор только ей и пользуюсь (подправляя при необходимости типы данных).

Добавьте в код 3-го поста такую строку
Visual Basic
1
Call QuickSort(a)
и всё будет тип-топ.
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
12.01.2012, 10:40
Цитата Сообщение от Aeliot Посмотреть сообщение
Добавьте в код 3-го поста такую строку
Visual Basic
1
Call QuickSort(a)
и всё будет тип-топ.
А вот это вряд-ли!
Получится возрастающая каша чисел, в которой никто не поймет,
какой цифре соответствует данное число!

Не по теме:

И почему все решили, что надо сортировать по количеству?
ТС писал - в ответе цифры расположить по возрастанию.
Да и сортировка эта почему-то не похожа на QuickSort (от Хоара),
а посему не внушает доверия:stop:



Добавлено через 2 часа 58 минут
Провел маленький тест-
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Option Explicit
 
Sub test()
Dim a(99999) As Single, t As Single
Dim I As Long             'Хоар         Aeliot
For I = 0 To UBound(a)    'QuickSort    QuickSortS
  a(I) = Rnd              '0,46875      0,546875
  'a(I) = I                '0,203125     468,3281
  'a(I) = UBound(a) - I    '0,234375    ~700 - запускать не стал, проинтерполировал
Next I
t = Timer
'QuickSortS a  'Aeliot
QuickSort a, 0, UBound(a)  'Хоар
Debug.Print Timer - t
End Sub
 
'Хоар
Sub QuickSort(a, ByVal L As Long, ByVal U As Long)
Dim I As Long, J As Long, x As Single, y As Single
I = L: J = U: x = a((L + U) \ 2)
Do
  While a(I) < x: I = I + 1: Wend: While x < a(J): J = J - 1: Wend 'по возрастанию
'  While A(I) > X: I = I + 1: Wend: While X > A(J): J = J - 1: Wend 'по убыванию
  If I <= J Then
    y = a(I): a(I) = a(J): a(J) = y:    I = I + 1: J = J - 1
  End If
Loop Until I > J
If L < J Then QuickSort a, L, J
If I < U Then QuickSort a, I, U
End Sub
 
'Aeliot
Sub QuickSortS(arr, Optional numEls As Variant, Optional descending As Boolean)
    Dim value As Single, temp As Single
    Dim sP As Integer
    Dim leftStk(32) As Long, rightStk(32) As Long
    Dim leftNdx As Long, rightNdx As Long
    Dim I As Long, J As Long
    
    ' account for optional arguments
    If IsMissing(numEls) Then numEls = UBound(arr)
    ' init pointers
    leftNdx = LBound(arr)
    rightNdx = numEls
    ' init stack
    Dim asd As String
    asd = CStr(arr(1))
    sP = 1
    leftStk(sP) = leftNdx
    rightStk(sP) = rightNdx
    
    Do
        If rightNdx > leftNdx Then
            value = arr(rightNdx)
            I = leftNdx - 1
            J = rightNdx
            ' find the pivot item
            If descending Then
                Do
                    Do: I = I + 1: Loop Until arr(I) <= value
                    Do: J = J - 1: Loop Until J = leftNdx Or arr(J) >= value
                    temp = arr(I)
                    arr(I) = arr(J)
                    arr(J) = temp
                Loop Until J <= I
            Else
                Do
                    Do: I = I + 1: Loop Until arr(I) >= value
                    Do: J = J - 1: Loop Until J = leftNdx Or arr(J) <= value
                    temp = arr(I)
                    arr(I) = arr(J)
                    arr(J) = temp
                Loop Until J <= I
            End If
            ' swap found items
            temp = arr(J)
            arr(J) = arr(I)
            arr(I) = arr(rightNdx)
            arr(rightNdx) = temp
            ' push on the stack the pair of pointers that differ most
            sP = sP + 1
            If (I - leftNdx) > (rightNdx - I) Then
                leftStk(sP) = leftNdx
                rightStk(sP) = I - 1
                leftNdx = I + 1
            Else
                leftStk(sP) = I + 1
                rightStk(sP) = rightNdx
                rightNdx = I - 1
            End If
        Else
            ' pop a new pair of pointers off the stacks
            leftNdx = leftStk(sP)
            rightNdx = rightStk(sP)
            sP = sP - 1
            If sP = 0 Then Exit Do
        End If
    Loop
End Sub
Если со случайно заполненным массивом эта сортировка ещё как-то пытается соперничать с Хоаром,
то с упорядоченными массивами её даже пузырёк обгонит!
Плюс гигантокод!
Вывод - выбросить эту сортировку и пользоваться обычным Хоаром!
1
 Аватар для Aeliot
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
13.01.2012, 12:13
Цитата Сообщение от Апострофф Посмотреть сообщение
Провел маленький тест-
...
Если со случайно заполненным массивом эта сортировка ещё как-то пытается соперничать с Хоаром,
то с упорядоченными массивами её даже пузырёк обгонит!
Плюс гигантокод!
Вывод - выбросить эту сортировку и пользоваться обычным Хоаром!
Вы правы. Как раз по этому поводу там, где брал код, поломали кучу копий.
Поскольку в моей практике обычно неупорядоченные массивы и как раз них он показывает наибольшую производительность, то я не стал загоняться по этому поводу, а со временем эта его особенность забылась. Спасибо что напомнили. И за дополнительный вариант сортировки тоже спасибо.
Цитата Сообщение от Апострофф Посмотреть сообщение
Получится возрастающая каша чисел, в которой никто не поймет,
какой цифре соответствует данное число!
мда, прошляпил.
Цитата Сообщение от Апострофф Посмотреть сообщение
И почему все решили, что надо сортировать по количеству?
ТС писал - в ответе цифры расположить по возрастанию.
Тогда можно вообще без сортировки. Просто вывод как предложил Апострофф
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2012, 12:13
Помогаю со студенческими работами здесь

Подсчитать, сколько раз в числе встречается заданная цифра
Число произвольно вводится пользователем

Макрос: определять вся связки товаров и считать, сколько раз каждая связка встречается
Добрый день! Кто-нибудь может дописать макрос, который будет определять вся связки товаров и считать, сколько раз каждая связка...

VBA: сколько раз данная цифра а встречается в целом четырёхзначном числе
помогите, очень - очень прошу!!! VBA: сколько раз данная цифра а встречается в челом четырёхзначном числе.

Составить программу, в которой определить сколько раз каждая буква, стоящая на четном месте слова Х встречается в слове У
Составить программу, в которой определить сколько раз каждая буква, стоящая на четном месте слова Х встречается в слове У.

Ввести произвольную строку, посчитать сколько раз в ней встречается каждый символ
Задачу я решил, но возникла загвоздка, которую я уже не в силах устранить... И загвоздка в следующем: код правильно подсчитывает сколько...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru