Страница: 1 |
Страница: 1 |
Вопрос: Массивы
Добавлено: 02.07.04 19:14
Автор вопроса: Berkut
Помогите плззз. Как посчитать кол-во повторяющихся элементов в массиве?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #1
Добавлено: 02.07.04 19:44
Ну наверное в цикле просмотреть, а если конкретнее, то что надо, кол-во элементов массива имеющих дубликат или ещё и количество этих дубликатов?
Номер ответа: 2
Автор ответа:
Berkut
Вопросов: 1
Ответов: 2
Профиль | | #2
Добавлено: 02.07.04 19:58
Вобщем, например:
Dim str(0 To 7) As String
Private Sub Form_Load()
str(0) = "раз"
str(1) = "раз"
str(2) = "раз"
str(4) = "два"
str(5) = "два"
str(6) = "три"
str(7) = "четыре"
End Sub
Как у знать что "раз" повторяется 3 раза, "два" - 2 раза, "три" 1 раз, и "четыре" - 1раз ??
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 02.07.04 20:20
это уже чистое программирование...
реализаций может быть несколько...
чтобы было проще, создай функцию, которая просматривает имеется ли в массиве такой-то эллемент... тогда удастся избежать тройного цикла
будет всего двойной...
один от нуля до верхней границы массива, второй - от счетчика первого цикла до верхней границы массива...
проверяешь есть-ли в глобальном массиве уже данный эллемент... если есть, то прибавляешь единичку к соответственному эллементу глобального массива... если нет такого - создаем эллемент...
вот все описание чуток запутанное, но все же
Номер ответа: 4
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #4
Добавлено: 02.07.04 20:30
Тебе алгоритм написать? А самому составить лень чтоли? Мы должны за тебя составить?
Номер ответа: 5
Автор ответа:
Berkut
Вопросов: 1
Ответов: 2
Профиль | | #5
Добавлено: 02.07.04 21:38
Зачем. мне достаточно и описания
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 02.07.04 22:43
Пытался на словах объяснить и запутался, проще код нарисовать:
Dim strArr(0 To 13) As String
Private Sub Form_Load()
 im SplitArray
 im ConString As String
strArr(0) = "раз"
strArr(1) = "раз"
strArr(2) = "раз"
strArr(4) = "два"
strArr(5) = "два"
strArr(6) = "три"
strArr(7) = "четыре"
strArr(8) = "пять"
strArr(9) = "пять"
strArr(10) = "четыре"
strArr(11) = "три"
strArr(12) = "два"
strArr(13) = "раз"
For i = LBound(strArr) To UBound(strArr)
ConString = ConString & strArr(i)
Next i
ConString = " " & ConString & " "
For i = LBound(strArr) To UBound(strArr)
SplitArray = Split(ConString, strArr(i))
If UBound(SplitArray) <> 0 Then Debug.Print strArr(i) & " " & UBound(SplitArray)
ConString = ""
For j = LBound(SplitArray) To UBound(SplitArray)
ConString = ConString & SplitArray(j)
Next j
ConString = " " & ConString & " "
Next i
End Sub
Номер ответа: 7
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #7
Добавлено: 04.07.04 13:03
Попробуй такое. Вроде работает.
Есть: Массив в котором нужно заменить (например MyArray).
В цикле перебираешь все элементы и вызываешь ф-ю CONST_Replace.
Типа такого:
For a=0 to Ubound(MyArray)
CONST_Replace(MyArray)
Next a
Процедура использует ещё 2 массива. Из одного берёт искомую строку, а из другого то, что нужно вместо неё подставить. Это массивы EQU_Name и EQU_Value.
'Объявления.
Public Declare Function IsCharAlphaNumeric Lib "user32.dll" Alias "IsCharAlphaNumericA" ( _
ByVal cChar As Byte) As Long
'Перед вызовом сделай Redim EQU_Name(0) и Redim EQU_Value(0)
Private EQU_Name() As String
Private EQU_Value() As String
'Сама процедура замены.
Sub CONST_Replace(ByRef CmdLine As String)
If UBound(EQU_Name) < 1 Then Exit Sub
If Len(CmdLine) < 1 Then Exit Sub
CmdLine = Trim$(CmdLine)
 im IsFound As Integer, SrchConst As Integer
 im Left_Ok As Boolean, Right_Ok As Boolean
 im LeftByte As Byte, RightByte As Byte
 im CmdLine_Left As String, CmdLine_Right As String
For SrchConst = 1 To UBound(EQU_Name)
IsFound = 0
MultiSearch:
IsFound = InStr(IsFound + 1, UCase$(CmdLine), UCase$(EQU_Name(SrchConst)))
If IsFound > 0 Then
If IsFound = 1 Then
Left_Ok = True
Else
LeftByte = Asc(Mid$(CmdLine, IsFound - 1, 1))
If IsCharAlphaNumeric(LeftByte) <> 0 Then Left_Ok = False Else Left_Ok = True
End If
If Len(CmdLine) = IsFound + (Len(EQU_Name(SrchConst)) - 1) Then
Right_Ok = True
Else
RightByte = Asc(Mid$(CmdLine, IsFound + (Len(EQU_Name(SrchConst)) - 1) + 1, 1))
If IsCharAlphaNumeric(RightByte) <> 0 Then Right_Ok = False Else Right_Ok = True
End If
If Left_Ok And Right_Ok Then
CmdLine = Replace(CmdLine, EQU_Name(SrchConst), EQU_Value(SrchConst), 1, 1, vbTextCompare)
GoTo MultiSearch
End If
End If
Next SrchConst
End Sub
Номер ответа: 8
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #8
Добавлено: 04.07.04 13:13
Убери из кода Dim CmdLine_Left As String, CmdLine_Right As String
Это лишнее.
Смотри как она меняет текст.
К примеру на входе есть такой текст:
const Arg1 equ ebp+8
const Arg11 equ [ebp+8]
const Arg equ ECX
mov Arg,[Arg1]
mov ecx,Arg11
mov Arg,Arg
Заменяются последние три строчки. Получается:
mov ECX,[ebp+8]
mov ecx,[ebp+8]
mov ECX,ECX
Номер ответа: 9
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #9
Добавлено: 04.07.04 13:14
Хм, немного не в тему. Ну да ладно.