XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Разбиение строки
Народ пожалуйста помогите разобраться с условиями и SubString'ом
В общем есть некая строка s и ширина width. Нужно разбить строку на строки с од. шириной width. При чем если разрыв произошел внутри слова, то нужно поставить -. Перенос строк работает нормально, а вот как сделать так чтобы - не ставился в конце текста. Например:
Цитата:
Исходная:
Привет !!!!!!!
Результат:
При-
вет !-
!!!!!!-

Вот что я накодил
Код:
function ParseString takes string s, integer width returns string
 local string result = ""
 local integer i = 1
 local integer linecount =  DivInt(StringLength(s),width)+1 //DivInt - деление без остатка
 loop
  exitwhen i > linecount
  if (SubString(s,i*width,i*width+1) != " ") and (SubString(s,i*width+1,i*width+2) != " ") then
   set result = result + SubString(s,(i-1)*width,i*width+1)+"- |n"
  else
   set result = result + SubString(s,(i-1)*width,i*width+1)+" |n"
  endif
  set i = i + 1
 endloop
 return result
endfunction
Старый 20.01.2011, 21:04
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Добавь ещё одну проверку к ифу, если i != linecount
Старый 20.01.2011, 21:40
JassMan
свободен
offline
Опыт: 4,193
Активность:
добавь проверку SubString(s,i*width,i*width+1) != "" (проверка на пустой символ)
Старый 20.01.2011, 21:41
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Icy, немного не так. i*width < len. Оттолкнулся от твоей мысли и получилось
Вот готовый код, если кому пригодиться
» раскрыть

Код:
function DivInt takes integer a, integer b returns integer
 return (a - ModuloInteger(a,b))/b
endfunction
function CharIsSpec takes string char returns boolean
 return (char == "!") or (char == "?") or (char == " ") or (char == "")
endfunction
function ParseString takes string s, integer width returns string
 local string result = ""
 local integer i = 1
 local integer len = StringLength(s)
 local integer linecount =  DivInt(len,width)+1
 local string array char
 loop
  exitwhen i > linecount
  set char[1] = SubString(s,i*width,i*width+1)
  set char[2] = SubString(s,i*width+1,i*width+2) 
  if (not CharIsSpec(char[1])) and (not CharIsSpec(char[2])) and (i*width < len) then
   set result = result + SubString(s,(i-1)*width,i*width+1)+"- |n"
  else
   set result = result + SubString(s,(i-1)*width,i*width+1)+" |n"
  endif
  set i = i + 1
 endloop
 set len = 0
 set i = 0
 set linecount = 0
 return result
endfunction

Тему можно закрывать я думаю
Старый 20.01.2011, 22:08
ScorpioT1000
Работаем
offline
Опыт: отключен
поиск такой поиск
Старый 20.01.2011, 23:23
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 07:43.