![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
270(д). Даны символы S1, S2,... Известно, что символ S1 отличен
от пробела и что среди S2, S3,... имеется хотя-бы один пробел. Рассматриваются S1,... SN - символы, предшествующие первому про- белу (N-заранее известно). Преобразовать последовательность S1,... SN : удалив из каждой группы цифр, которой не предшес- твует точка, все начальные нули (кроме последнего, если за ним идет точка ). |
|
#2
|
|||
|
|||
|
попонятние изложи суть
|
|
#3
|
|||
|
|||
|
Цитата:
Ну и чего тут непонятного. Есть дробные числа, записанные в виде строки через пробел. Надо удалить в них ведущие (незначащие) нули, кроме последнего, если он перед точкой (т.е. число < 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; |