Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2014, 11:26   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
function TrimCharM(const _Ch: Char; str: PChar): PChar;
begin
  while str^<>#0 do begin
    if str^<>_Ch then Break;
    Inc(str);
  end;
  Result:=str;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2014, 12:52   #22
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Зачем так усложнять?
Код:
function TrimChar(const _Ch: Char; str: PChar): PChar;
begin
     while str^ = _Ch do inc(str);
     Result:= str;
end;
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 13:18   #23
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну да, так еще компактней и это намного быстрей всех выше предложенных вариантов , но преобразование при вызове String в PChar и наоборот скорее всего съест почти все достижения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2014, 13:38   #24
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

А как такая функция? Сильно не тру?
Код:
function TrimChar(const _Ch: Char; const str: string): string;
var
i: integer;
begin
     i:= 1;
     while str[i] = _Ch do inc(i);
     Result:= AnsiMidStr(str, i, Length(str)+1-i);
end;
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 13:47   #25
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

AnsiMidStr в конечном счете Cору и WHILE медленнее FOR (хотя здесь это и не важно видимо), да еще пустая строка или из одних _Ch. Короче плохо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.12.2014 в 13:51.
Аватар вне форума Ответить с цитированием
Старый 04.12.2014, 13:54   #26
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
AnsiMidStr в конечном счете Cору и WHILE медленнее FOR (хотя здесь это и не важно видимо), да еще пустая строка или из одних _Ch. Короче плохо
Да, пустой ввод с такой функцией придется обрабатывать...
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 14:29   #27
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
function TrimChar(const _Ch: Char; const str: string): string;
var
PStr: ^string;
i: integer;
begin
     PStr:= @str;
     for i:= 1 to Length(Pstr^) do
      if Pstr^[i] <> _Ch then
      Result:= Result + Pstr^[i];
end;
Сильно грешно резалт плюсовать?
То что высекает все _Ch пока не смотреть)))
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 14:33   #28
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сильно грешно резалт плюсовать?
Каждый раз выделение памяти под новую строку, освобождение ранее использованной, перемещение данных
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2014, 14:43   #29
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Каждый раз выделение памяти под новую строку, освобождение ранее использованной, перемещение данных
Очень многое будет зависеть от менеджера памяти. На ПК можно практически что угодно творить, заметная разница будет с мобильной платформой.
StriderX вне форума Ответить с цитированием
Старый 04.12.2014, 14:44   #30
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Каждый раз выделение памяти под новую строку, освобождение ранее использованной, перемещение данных
Ну, тогда без одного Copy не обошлось...
Код:
function TrimCharM(const _Ch: Char; const str: string): string;
var
PStr: ^string;
i: integer;
begin
     i:=1;
     PStr:= @str;
     while Pstr^[i] = _Ch  do inc(i);
       Result:= Copy(Pstr^, i, Length(Pstr^));
end;
Iron Monk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отбросить пробелы после числа? MishkaSh Помощь студентам 1 04.04.2013 05:52
заменить элементы одномерного массива, стоящие перед минимальным - на нули, а стоящие после максимального - на единицы (Паскаль) Женька Good Помощь студентам 2 01.12.2011 06:22
как заставить VBA не откидывать нули впереди числа kusyusha Microsoft Office Word 3 14.11.2010 22:27
Дано число. Отбросить в нем все цифры, стоящие левее самой правой единицы. SkApY Помощь студентам 5 09.11.2009 20:58
как отбросить целую часть оставив дробную Alex26RusLink Паскаль, Turbo Pascal, PascalABC.NET 1 24.10.2009 11:36