exAres
I love magic :)
offline
Опыт:
7,788Активность: |
Цитата:
|
|
02.07.2007, 10:51 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
вот мой вариант...
Код:
я не исключаю что есть баги =) но вроде работает более мение + имеет проверку НЕХ значения |
02.07.2007, 21:15 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
MrSmiLe,
Цитата:
Но СубСтрингов было не пара, а почти в каждом if'е. ;) YasonDelAlt добавил: Вот окончательный вариант функции, исправлена ошибка с неправильным разбиением и добавлена обработка цветовых тегов. Просто и элегантно. Правда всяких проверок на правильность тегов нет, да и это, я думаю, не главное. Как всегда пишу код в уме и проверить его не начем. код ищи ниже. Отредактировано YasonDelAlt, 06.07.2007 в 09:50. |
|
03.07.2007, 09:09 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
Цитата:
Код:
Toadcop добавил: YasonDelAlt вообщем =) выражусь так... он не рабочий =) (твой код, логика алгоритма иммею ввиду) |
||
03.07.2007, 12:15 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
YasonDelAlt, зачем тебе переход в нижний регистр?На что это влияет в этом коде?
А еще у меня такой вопрос: вот, почто создал свой код и у меня почти все получилось, кроме переноса тегов из одного слова в другое(например: строка- |cff00ff00Слово1_Слово2|r ,Amount = 5, должно получится: PartStr[0] = |cff00ff00Слово1|r PartStr[1] = |cff00ff00Слово2|r по задумке...но не переносится, я над эти еще поработаю. А вот 2-е , что не получилось: Если будет строка: Слово1_Слово2_Слово3, Amount = 13, тогда получится: PartStr[0] = Слово1_Слово2 PartStr[1] = Слово3 , а если будет строка: |cffff0000Слово1|r_Слово2_Слово3, Amount = 13, тогда получится: PartStr[0] = Слово1 PartStr[1] = Слово2_Слово3 Почему? Ведь у меня сначала проверяет уберется ли в PartStr слово без тегов, если да, добавляет в PartStr слово с тегами. И вообще StringLength какой-то глюченый, он должен определять длину строки, как мне кажется, а определяет чего-то не то: Если слово без тегов, каждую букву считает за 2, а если с тегами, вообще непойми чего...как он так считает? |
03.07.2007, 15:42 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
Alex_Hell, длинна символа кириллицы = 2, английского = 1
|
03.07.2007, 17:26 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
кириллица - зло и некому не нужна <_< |
03.07.2007, 17:36 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
тем не менее, длина строки на русском = (кол-во символов в строке * 2) |
03.07.2007, 17:38 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
FellGuard безусловно =) это факт я просто иной факт проветил ;) да это даже видно если вводить парь в ВоВе или Баттле.нете (Вар3) то если Кириллическте символы то они занимают 2 звёздочки ^^
|
03.07.2007, 17:49 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
Toadcop,
после опечатки обламается и движок варкрафта. Хорошо выглядящий код проще понять, исправить и оптимизировать. У меня всего три склеивания строки за кучу итераций цикла, у тебя же в каждой итерации оно есть, плюс ко всему происходит куча вызовов функций, не относящихся к главной цели - порубить строку. Если ты проверил мой код на работоспособность, то пажалуйста скажи что не так он делает. Сам я не могу его потестить :(. Alex_Hell, перевод в нижний регистр заменяет код подобный этому: Код:
в нескольких местах на: Код:
что ускоряет выполнение и облегчает исправление/изменение кода. FellGuard, Цитата:
ошибаешся, строка на русском может содержать знаки препинания, а их длина один байт. Так что длина строки (возвращаемая стандартной функцией) равна сумме длин всех символов в строке. |
|
04.07.2007, 09:02 | #30
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
угу, давайте теперь запятые с пробелами причислять к русским символам
FellGuard добавил: Цитата:
|
|
04.07.2007, 11:37 | #31
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
так чего, нужно делать функцию на проверку русские или английские символы в строке?
Тогда, как я думаю, предется самому назначать каждому слову свою длину и писать в переменную... Цитата:
Цитата:
А мне кто-нить объяснит сколько занимает каждый символ английский - 1, русский - 2, а всякие там запятые и прочее? Alex_Hell добавил: Еще: YasonDelAlt,воспользуюсь твоей идеей перевода в нижний регистр. |
||
04.07.2007, 13:24 | #32
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
то что проиходит у меня в алгоритме имеет повод =) кстати посмотрев на ваши алгоритмы =/ я немогу представить что они могу работать правильно... только если у смайла т.к. у него есть нужный по размеру для этого код. вообщем полубому надо узнать на 100% где будет строка обрезана перед началом самого парса иначе вас ждёт кучу багов =). в моём случаи это делаетьса функией которая находит длину куска (вроде как я тестил нормально это делает). потом главный парсур оринтируетьса по этим данным не допуская ошибок. хрен знает попробуйте завалить его =) (мой парсер такой задачей которую он бы выполнил не правильно в текущих рамках условий конечно ;)) просто я сам не смог найти как известно разным людям легче находить ошибки из за разного мышления =) Цитата:
Цитата:
Toadcop добавил: угу вот... Код:
ну вообщем я про то что не надо заявлять что это будет там круче + быстрее (да при нескольких вызовах оно будет чуть быстрее) но это фигня т.к. можно спороть в другой части алгоритма и потратить больше времени. YasonDelAlt + как ты определяеш скорость выполнения алгоритма ? =) |
|||
04.07.2007, 15:14 | #33
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
А я тут попробовал через StringCase(Substring(Str,X,X),false) находить пробелы и теги, где X - позиция проверяемого Loop-а и он вообще чего-то не правильно находит, как только убрал StringCase и оставил SubString(Str,X,X) - все стало работать...ничего не понял:)
Лучше через Код:
|
04.07.2007, 16:49 | #34
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Alex_Hell это относительно... то что ты написал =) ну как ты хош вообщем это только визуальный вопрос т.к. в производительности разници почти нету.
|
04.07.2007, 17:04 | #35
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
Toadcop, я моло мальки представляю что происходит в потрохах движка вара, и знаю, что каждое сравнение преременных сложных типов данных (в данном случае строк) порождает вызов функции сравнения, по этому одна функция перевода в нижный регистр лучше, чем три лишних сравнения, а в цикле набираеются десятки лиших вызовов вункций. Я хоть и не професиональный программист, но я постоянно учусь (у меня относительно обширные знания, но опыта маловато).
Я исправил одну из ошибок в своей функции, которая могла приводить к кривому разбиению строки, если цветовой тег находился в начале блока. Toadcop, будь добр, если можешь проверь мою функцию (используя латиницу!), будет она работать или нет, плиз! Насчет облома с кривыми тегами, ты же сам видел, какая лажа выводится если сделать очепятку в теге!!? Alex_Hell, в МелкоМягких Форточках есть такая фигня как MultiByteString, это извращенное подобие Юникода (скорее даже предок). В таких строках базовая часть ASCII - первые 127 символов (управляющие символы, латинский алфавит, цифры, знаки препинание и еще кой какие символы) кодируется одним байтом, а вот все остальное (символы национальных алфавитов и другие редкие символы) кодируется двумя байтами. В Форточках есть несколько API-функций для работы с такими строками. В общем это большой геморой, и моло кто с ними связывается. Но вот близы видать посудили, что сыкономить чуток памяти (они ж на английском говорят и кроме латиницы им не фига не надо) будет не плохо, и не стали использовать Юникод. Но использовать иностранные алфавиты для локализации осталась возможность. А ведь программистов там много, и за всеми не уследишь. По этому часть из них рачитывала на мультибайтовые строки и использовали соответвующие функции (те кто за графику отвечают, русский текст то быводится нормально), а другие (те кто над JASS движком колдовал) использовали API для обычных ASCIIZ (кааждый символ занимает оди быйт) строк. Вот по этому нам - русским людям, приходится парится над самопальными функциями для обработки строк. Все выше написанное не воспренимать за голые факты, ибо все это мои домыслы, а верить в них или нет - ваше дело. Alex_Hell, может ты просто переводил в нижний регистр (StringCase(ss,false)), а сравнивал с символами в верхнем? YasonDelAlt добавил: Alex_Hell, если ты не понимаешь прицип отлова русских символов в строке, то и не парься, просто возьми функции для работы со строками из библиотеки. Ну или посмотри как это там делается. |
05.07.2007, 09:51 | #36
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
Отдаю свой голос за вариант YasonDelAlt: чистый код, алгоритм отличный (за идею со стеком отдельный респект), код небольшой.
Сейчас еще проведу тесты в варе на предмет синтаксических ошибок+стресстест вырожденных случаев, но вроде они предусмотрены кодом. Markiz добавил: Синтаксические ошибки: 14 строка - надо string array вместо array string 18 строка - надо exitwhen вместо exitwen Markiz добавил: YasonDelAlt Неправильный ответ в тесте "Shla Sasha Po Shosse i Sosala Sushku" (size = 10) -- последние два слова отправились в одну строку, а это 13 символов (если вместе с пробелом) Вот мапа, в принципе на ней можно тестить всех участников Markiz добавил: Код тоадкопа на правильность таким образом проверить невозможно, так как он не удосужился его оформить в соответствии с первым постом топика. |
05.07.2007, 18:16 | #37
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
Цитата:
Цитата:
YasonDelAlt даже незная этого О_О. вообщем всё ясно... Toadcop добавил: а мой голос за алг смайла =) МрСмайл +1 |
|||
05.07.2007, 21:25 | #38
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
Toadcop
У него рабочий код написан крайне изящно и без извращений, у тебя несколько килобайт хз чего. Ну а то, что ты не в состоянии прочитать условия, так кто ж виноват. |
05.07.2007, 22:29 | #39
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Markiz никаках условий там нету =) просто автор более лам чем я зачем мне спускатьса специально на ламерский уровень ? =) есть задачя я иё решаю как я считаю правильно вот и всё.
Цитата:
+ честно то его алг сосёт... почему ? автор сам написал у него мало опыта... а теория являетьса парашей на бумаге это все знают. |
|
05.07.2007, 22:42 | #40
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|