Наложение строки на строку (ведущие нули/символы)

Добавлен , опубликован
enum (StringOverlayCentering) { SOC_SOURCE_LEFT, SOC_SOURCE_RIGHT, SOC_SOURCE_CENTER }

// Places the overlay string on the source string and returns result string. Centering method specifies position of the remaining symbols.
string StringOverlay(string source, string overlay, StringOverlayCentering centeringMethod) {
    integer slen = StringLength(source)
    integer olen = StringLength(overlay)
    integer delta = olen - slen
    integer gamma = 0
    string result = ""
    if (delta > 0) {
        if (centeringMethod == SOC_SOURCE_RIGHT) {
            return SubString(overlay, 0, delta) + source 
        } elseif (centeringMethod == SOC_SOURCE_LEFT) {
            return source + SubString(overlay, olen - delta, olen)
        } else {
            gamma = delta / 2
            delta = R2I( I2R(delta) / 2  + 0.5 )
            return SubString(overlay, 0, delta) + source + SubString(overlay, olen - gamma, olen)
        }
    }
    return source
}
Тесты/примеры:
BJDebugMsg( StringOverlay("mama","ABCDEF", SOC_SOURCE_LEFT) ) // = "mamaEF"
BJDebugMsg( StringOverlay("mama","ABCDEF", SOC_SOURCE_RIGHT) ) // = "ABmama"
BJDebugMsg( StringOverlay(I2S(285),"00000000", SOC_SOURCE_RIGHT) ) // = "00000285"
BJDebugMsg( StringOverlay("mama","ABCDEF", SOC_SOURCE_CENTER) ) // = "AmamaF"
BJDebugMsg( StringOverlay("mama","ABCDEFG", SOC_SOURCE_CENTER) ) // = "ABmamaG"
BJDebugMsg( StringOverlay("mam","ABCDEFG", SOC_SOURCE_CENTER) ) // = "ABmamFG"
BJDebugMsg( StringOverlay("mam","ABCDEF", SOC_SOURCE_CENTER) ) // = "ABmamF"
BJDebugMsg( StringOverlay("mam","ABCDEFGHIJKLMNOPQRSTUVWXYZ", SOC_SOURCE_CENTER) ) // = "ABCDEFGHIJKLmamPQRSTUVWXYZ"
BJDebugMsg( StringOverlay("mam","ABCD", SOC_SOURCE_CENTER) ) // = "Amam"
BJDebugMsg( StringOverlay("scorpiot","ABCDEF", SOC_SOURCE_CENTER) ) // = "scorpiot"
Более простая версия на Jass
// Places the overlay string on the source string and returns result string
function str_overlay takes string source, string overlay, boolean source_to_the_right returns string
     local integer slen = StringLength(source)
     local integer olen = StringLength(overlay)
     local integer delta = olen - slen
     local string result = ""
     if delta > 0 then
          if source_to_the_right then
               return SubString(overlay, 0, delta) + source 
          else
               return source + SubString(overlay, olen - delta, olen)
          endif
     endif
     return source
endfunction
Тесты/примеры:
BJDebugMsg(str_overlay("mama","ABCDEF", true)) // = "ABmama"
BJDebugMsg(str_overlay("mama","ABCDEF", false)) // = "mamaEF"
BJDebugMsg(str_overlay("scorpiot","ABCDEF", true)) // = "scorpiot"
`
ОЖИДАНИЕ РЕКЛАМЫ...
38
Тут спрашивали в академии, буду теперь так отвечать. Чтобы не завалялось в архивах форума =)
38
Да пусть будет, потом можно на галакси перегнать всё, там этого нету, а самому лень писать. Вот соберется таких ответов штук 300 - щитай уже как мини фреймворк)
29
Сделать можно проще имхо, но с бд по алфавиту.
38
Msey, какому алфавиту?)
надо например таблицу сделать вроде (не обязательно точки можно и пробелы)
12......56.......9
64.......5......14
это делается в 2 строки =)
15
ScorpioT1000:
Тут спрашивали в академии, буду теперь так отвечать. Чтобы не завалялось в архивах форума =)
Ты только это. Сделай вверху новую группу вроде "Статей" или "Моделей".
Лучше всего со страницей оглавлением, как это сделано для статей.
Чтобы можно было найти быстрее, чем перелопачивать 80 страниц безымянных ресурсов.
Искать что-то в 80 страницах ресурсов себе дороже.
38
Не знаю, что ты там где ищешь =) xgm.ru/p/wc3/tag/algorithm это и есть группа называет Алгоритмы, просто она не наверху, а справа
17
Очень пригодится для системы диалогов... (...впиливать её просто даже к моему ...ээ проекту) . Так что зачет!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.