Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 02.07.04 20:20
это уже чистое программирование...
реализаций может быть несколько...
чтобы было проще, создай функцию, которая просматривает имеется ли в массиве такой-то эллемент... тогда удастся избежать тройного цикла ;)
будет всего двойной...

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


вот все описание :) чуток запутанное, но все же ;)

Ответить

Номер ответа: 4
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #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()
    ;Dim SplitArray
    ;Dim 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-сайт: basicproduction.nm.ru/
 Профиль | | #7
Добавлено: 04.07.04 13:03
Попробуй такое. Вроде работает.

Есть: Массив в котором нужно заменить (например MyArray).
 В цикле перебираешь все элементы и вызываешь ф-ю CONST_Replace.
 Типа такого:
 For a=0 to Ubound(MyArray)
  CONST_Replace(MyArray(a))
 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)
 ;Dim IsFound As Integer, SrchConst As Integer
 ;Dim Left_Ok As Boolean, Right_Ok As Boolean
 ;Dim LeftByte As Byte, RightByte As Byte
 ;Dim 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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #9
Добавлено: 04.07.04 13:14
 Хм, немного не в тему. :( Ну да ладно.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам