Страницы: 1
RSS
Перебрать комбинации с заменой букв е, ё
 
Здравствуйте подскажите пожалуйста мучаюсь с написанием цикла как перебрать все возможные комбинации подставляя буквы е/ё в Соловьёв Артём Фёдорович, Соловьев Артём Фёдорович. И совсем не представляю как сделать перебор когда двойное имя или фамилия с теми же злосчастными ё/е Ёжиков-Соловьёв Артём Фёдорович
Код
Function check(snmn)
    r2 = Len(snmn)
    count = 0
  
    For r1 = 1 To r2
        If Right(Left(snmn, r1), 1) = "Ё" Or Right(Left(snmn, r1), 1) = "ё" Then 'не мог никак посчитать кол-во ё в строке кроме этого странного метода 
            count = count + 1
        End If
        If Right(Left(snmn, r1), 1) = "Е" Or Right(Left(snmn, r1), 1) = "е" Then 'не мог никак посчитать кол-во е в строке кроме этого странного метода 
            count = count  + 1
        End If
    Next r1
    
    str1 = Split(snmn, " ", 3)
    comb2 = 2 ^ count
    For comb1 = 1 To comb2
        'str2 = Replace(str1(0), "ё", "е")&
    Next c1
end function
 
Доброе время суток
Цитата
pavel_ivanov написал:
как перебрать все возможные комбинации
Комбинации чего с чем?
Пока ваш код подсчитывает количество букв е и ё в тексте snmn. Вы бы уточнили что вы хотите?
Right(Left(snmn, r1), 1) можно заменить Mid$(snmn, r1, 1) и не мучатся :)
Можно подсчитать количество и без цикла
Код
    текстБезЕЁ = Replace$(Replace$(snmn, "е", "", Compare:=vbTextCompare), "ё", "", Compare:=vbTextCompare)
    еёКоличество = Len(snmn) - Len(текстБезЕЁ)
 
Хочу ПЕРЕБРАТЬ возможные комбинации ФИО для дальнейших мунипуляций.)
Чем больше ё и е в ФИО тем больше комбинаций людей. 2 е/ё 4(комбинации)4(разных человека)... 5 е/ё 32(комбинации) 32 разных человека ..2^n людей
Изменено: pavel_ivanov - 20.01.2020 20:24:22
 
Цитата
pavel_ivanov написал:
ПЕРЕБРАТЬ возможные комбинации ФИО
где?
Правильно ли я понимаю, что вы, подобно Советник I категории, считаете, что пример того что есть, того что надо получить не нужен?
 
вот пожалуйста.на вход подаётся ФИО если в нем есть е или ё подсчитываются сумма "е" и "ё"(n), потом подсчитываются все возможные комбинации(вот по такой формуле(2^n)). потом создаётся массив из этих комбинаций.
Изменено: pavel_ivanov - 20.01.2020 21:54:03
 
Цитата
pavel_ivanov написал:
ФИО если в нем есть е или ё
хм, а если на входе Семён Алексеевич?
 
получается 2^5 :-)
 
Вариант
Код
Public Function SwitchYOE(ByVal InitText As String)
    Dim arrOut() As String, char As Object
    Static pReg As Object
    Dim i As Long, k As Long, pos As Long, oldChar As String, Chars As Object
    If pReg Is Nothing Then Set pReg = CreateObject("VBScript.RegExp"): pReg.Global = True: pReg.IgnoreCase = True: pReg.Pattern = "е"
    InitText = Replace$(Replace$(InitText, "ё", "е", Compare:=vbBinaryCompare), "Ё", "Е", Compare:=vbBinaryCompare)
    Set Chars = pReg.Execute(InitText)
    ReDim arrOut(0 To 2& ^ Chars.Count - 1)
    arrOut(0) = InitText
    pos = 0
    For i = 1 To UBound(arrOut)
        k = 0
        Set char = Chars(k)
        oldChar = Mid$(InitText, char.FirstIndex + 1, 1)
        Do While LCase$(oldChar) = "ё"
            Mid$(InitText, char.FirstIndex + 1, 1) = IIf(oldChar = "Ё", "Е", "е")
            k = (k + 1) Mod Chars.Count
            Set char = Chars(k)
            oldChar = Mid$(InitText, char.FirstIndex + 1, 1)
        Loop
        Mid$(InitText, char.FirstIndex + 1, 1) = IIf(oldChar = "Е", "Ё", "ё")
        pos = pos + 1
        arrOut(pos) = InitText
    Next
    SwitchYOE = arrOut
End Function
Изменено: Андрей VG - 21.01.2020 10:02:03
 
Спасибо большое круто выглядит когда Соловьёв Семён Алексеевич) Вопрос можно закрывать )
Страницы: 1
Наверх