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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2011, 18:00   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Удаление повторяющихся нулей

Добрый вечер! Если есть, например, число 001237, то как из него удалить "00", чтобы осталось 1237? А если число 000123, то чтобы осталось 123. Если 012382, то осталось 12382.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.07.2011, 18:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну судя по проблеме у вас строка, просто:
Код:
function TrimStartZero(s:string):string;
var i,j:integer;
begin
 i:=0;
 for j:=1 to Length(s) do if (s[j]='0') then inc(i) else break;
 if(i>0)then Delete(s,1,i);
 Result:=s;
end;
примерно так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.07.2011, 18:54   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если заведомо в строке все цифры и их не больше 9 то еще проще:
Код:
Result:=IntToStr(StrToInt(s));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.07.2011 в 20:27.
Аватар вне форума Ответить с цитированием
Старый 05.07.2011, 18:56   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проще, но я не уверен что быстрее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.07.2011, 18:57   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
проще, но я не уверен что быстрее.
Нужно эксперимент провести

Добавил. На 10.000.000 обращений получил по 1-му варианту 00:00:02.777, по 2-му 00:00:02.137 - практически без разницы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.07.2011 в 20:27.
Аватар вне форума Ответить с цитированием
Старый 05.07.2011, 19:50   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Если есть, например, число 001237, то как из него удалить "00", чтобы осталось 1237?
Код:
while pos('0',s)=1 do
delete(s,1,1);
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 05.07.2011, 21:19   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
while (Length(s) > 0) and (s[1] = '0') do delete(s, 1, 1);
Считаем производительность
Или немного измененный код Пепел Феникса:
Код:
var
  c, Len: Integer;
begin
  c := 0;
  Len := Length(s);
  for I := 1 to Len do
  begin
    if s[I] = '0' then
      Inc(c)
    else
      Break;    
  end;
  if c > 0 then
    Result := Copy(S, c + 1, Len - c)
  else
    Result := s;
end;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 05.07.2011 в 21:37.
chertovich вне форума Ответить с цитированием
Старый 05.07.2011, 22:22   #8
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

А я, пожалуй, вариант с процедурой предложу
Код:
procedure TrimStartZero(var S: String);
var I : Integer;
begin
  for i := 1 to length(S) do
    if S[i] <> '0' then
    begin
      Delete(S, 1, i-1);
      Break;
    end;
end;
_Engine_ вне форума Ответить с цитированием
Старый 05.07.2011, 23:33   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Если заведомо в строке все цифры и их не больше 9 то еще проще:
Код:
Result:=IntToStr(StrToInt(s));
Мне кажется, не сработает такой вариант.

По замыслу, если на вход поступает 10000, то на выходе должно быть 1, так?
Однако, если мы применим алгоритм в таким данным, на выходе мы получим то же, что и на входе (10000).
Вадим Мошев вне форума Ответить с цитированием
Старый 06.07.2011, 00:13   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну если пошла такая драка, то показую результаты теста на 1.000.000 обращений (насчет 10.000.000 в #5 загнул, процедуру из #8 не тестировал)
Код:
#2   - 00:00:2.371
#3   - 00:00:2.059 очень удивился, что самый быстрый способ
#6   - 00:00:3.495
#7.1 - 00:00:3.213
#7.2 - 00:00:2.387
Цитата:
По замыслу, если на вход поступает 10000, то на выходе должно быть 1, так?
Однако, если мы применим алгоритм в таким данным, на выходе мы получим то же, что и на входе (10000).
Речь идет о незначащих нулях
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление повторяющихся записей в БД Dinamik БД в Delphi 8 22.03.2012 22:05
удаление из таблицы повторяющихся значений CodeNOT PHP 2 28.03.2011 12:01
Удаление повторяющихся слов C vivo89 Помощь студентам 2 24.12.2009 09:18
Удаление повторяющихся данных demonic Microsoft Office Access 6 19.02.2009 11:09
Удаление повторяющихся записей gavrylyuk Microsoft Office Excel 3 28.06.2008 08:10