Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Delphi .NET
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.05.2010, 14:28
TOMMY TOMMY вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 2
Репутация: 10
Восклицание Преобразовать последовательность

270(д). Даны символы S1, S2,... Известно, что символ S1 отличен
от пробела и что среди S2, S3,... имеется хотя-бы один пробел.
Рассматриваются S1,... SN - символы, предшествующие первому про-
белу (N-заранее известно). Преобразовать последовательность
S1,... SN : удалив из каждой группы цифр, которой не предшес-
твует точка, все начальные нули (кроме последнего, если за ним
идет точка ).
Ответить с цитированием
  #2  
Старый 05.06.2010, 01:45
OnzMill OnzMill вне форума
Прохожий
 
Регистрация: 06.10.2009
Сообщения: 48
Репутация: 10
По умолчанию

попонятние изложи суть
__________________
Говори что думаешь, думай, что говоришь.
(Шоссе 60)
Ответить с цитированием
  #3  
Старый 05.06.2010, 07:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от OnzMill
попонятние изложи суть

Ну и чего тут непонятного. Есть дробные числа, записанные в виде строки через пробел. Надо удалить в них ведущие (незначащие) нули, кроме последнего, если он перед точкой (т.е. число < 1).

Решение. Преобразуем массив (видимо в массиве символы) в список строк (с ними удобнее работать) и далее убираем все ведушие нули.

Код:
// Массив в строку сам переведешь.
function ProcessNumberArray(S : String) : String;
var
  L : TStringList;
  Buf : String;
  Idx, I : Integer;
begin
  // "Пилим" на строки
  L := TStringList.Create;
  Idx := Pos(' ',S);
  While Idx > 0 Do
    Begin
      Buf := Copy(S,1,Idx-1);
      S := Copy(S,Idx+1,Length(S)-Idx+1);
      If Buf <> '' Then L.Add(Buf);
      Idx := Pos(' ',S);
    End;
  If S <> '' Then L.Add(S);

  // Удаляем все лишнее
  For I := 0 To L.Count-1 Do
    Begin
      Buf := L[i];
      While (Length(Buf) > 1) And (Buf[1] = '0') And (Buf[2] <> '.') Do
        Buf := Copy(Buf,2,Length(Buf)-1); // можно через delete
      L[i] := Buf;
    End;

  // Собираем результат
  Result := '';
  For I := 0 To L.Count-1 Do
    Begin
      If Result <> '' Then Result := Result + ' ';
      Result := Result + L[i];
    End;

  // Чистим за собой...
  L.Free;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter