Выход за пределы стринга

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Выход за пределы стринга

Re: Выход за пределы стринга

Absurd » 17 мар 2007, 13:40

Меня в общем удивляет - зачем уродовать чужой объект? Почему бы новый не создать и с ним уже не извращаться?

Код: Выделить всё

function removeDupChars(param: string):string;
var i: integer;
    c: Char;
begin
  c := chr(0);
  result := '';
  for i:=1 to length(param) do
    if param[i] <> c then
      begin
        c := param[i];
        result := concat(result, c);
      end;
end;

Re: Выход за пределы стринга

Колядин Максим » 17 мар 2007, 01:36

Игорь Акопян писал(а):Колядин Максим, единственное дополнение - предлагая решение, обрати внимание читающего, что есть нюанс
Согласен... Надо было.

Re: Выход за пределы стринга

Игорь Акопян » 14 мар 2007, 09:11

Колядин Максим, единственное дополнение - предлагая решение, обрати внимание читающего, что есть нюанс ;)

Re: Выход за пределы стринга

somewhere » 13 мар 2007, 11:34

&quot писал(а):Предложишь другой вариант решения этой задачи? Есть другие, более краткие способы? - давай, оптимизатор -);
Что ж, по многочисленным просьбам телезрителей, :-), меняем метод работы. Будем не удалять, а собирать.

Код: Выделить всё

i := 1;
For x := 2 to length(s) do
    if s[x]<>s[i] then
       begin
       inc(i);
       s[i] := s[x];
       end;
s[0] := chr(i);
Подлинее, но ...
Тесты скорости, использовалась строка 'Hells Bells', время замера - 100 тактов DOS таймера (~5.5 сек)
Код №1 - вариант Максима
Код №2 - вариант мой.
----------------------------
Код №1 - 3 645 365 раз/сек
Код №2 - 18 825 449 раз/сек
----------------------------
Строка 'Thanks for choosing Google Earth, now click finish to complete setup'
Код №1 - 2 402 021 раз/сек
Код №2 - 5 606 163 раз/сек
----------------------------
Строка 'Deleeeeete thissssssss pleassssseeeeee'
Код №1 - 501 818 раз/сек
Код №2 - 10 029 670 раз/сек

Re: Выход за пределы стринга

Duncon » 12 мар 2007, 23:23

Поконкретней.. eof возвращает конец файла к примеру - это функция..
Здесь уже писал кто-то записывается строка и ее длинна все..

Re: Выход за пределы стринга

Yura_ua » 12 мар 2007, 22:47

Уважаемые сеньоры девелоперы! Может мой вопрос покажется идиотским, но я ещё только учусь :-) А паскаль включает в длину строки символы ln, eof или как они там называются?

Re: Выход за пределы стринга

Duncon » 12 мар 2007, 19:41

if (length(s)= 255) then length:= length(s) -1 и все решение задачки

ps вопрос теоритический мне его сей час не проверить- дальше месить ступу не буду..

Re: Выход за пределы стринга

Колядин Максим » 12 мар 2007, 16:10

somewhere писал(а):Ну если так, то своим кодом ты добавил лишний проход For и подцепил ошибку.
Предложишь другой вариант решения этой задачи? Есть другие, более краткие способы? - давай, оптимизатор -);

Re: Выход за пределы стринга

Хыиуду » 12 мар 2007, 16:04

Особенно это в программах взлома шифров грубой силой критично.

Re: Выход за пределы стринга

somewhere » 12 мар 2007, 16:00

&quot писал(а):Я просто предложил свой вариант кода, который отличается как раз этими двумя символами. Да и вообще, я не люблю коды с лишними операциями, сколько бы символов они не занимали...
Ну если так, то своим кодом ты добавил лишний проход For и подцепил ошибку. Похоже с настоящей оптимизацией ты еще не знаком. Могу предложить код, который при хорошем подходе сокращается в 5 раз, и примерно в столько же быстрее. Посмотри, потренируйся...

Вернуться к началу