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