Тема: 2 задачки
Показать сообщение отдельно
  #6  
Старый 14.02.2009, 20:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

алгоритм решения 2й задачи:
1. Разбить предложения в массив строк по словам.
2. идем циклом по полученному массиву и собираем предложение обратно по условиям: если индекс нечетный - пропускаем, если четный - добавляем, переворачивая.
3. Переворот - работаем со строкой, как с массивом, идем от конца к началу и добавляем результат.

Код:
// переворачивает строку
function ReverseStr(AStr : String) : String;
var
  I : Integer;
begin
  Result := '';
  For I := Length(AStr) DownTo 1 Do Result := Result + AStr[i];
end;

// обрабатываем фразу
function ProcessPhrase(APhrase : String) : String;
var
  I : Integer;
  A : Array Of String;
begin
  // разбиваем предложение на слова в массив
  SetLength(A,0);
  While Pos(' ',APhrase) > 0 Do
    begin
      SetLength(A,Length(A)+1);
      A[High(A)] := Copy(APhrase,1,Pos(' ',APhrase) - 1);
      APhrase := Copy(APhrase,Pos(' ',APhrase)+1,Length(APhrase) - Pos(' ',APhrase) + 1);
    end;
  If APhrase <> '' Then
    begin
      SetLength(A,Length(A)+1);
      A[High(A)] := APhrase;
    end;

  // Выводим по условиям
  // Дин. массив A имеет начало с 0!!!
  Result := '';
  For I := Low(A) To High(A) Do
    If ((I+1) mod 2) = 0 Then
        Result := Result + ReverseStr(A[i]) + ' ';

  // Подчищает пробел в хвосте
  Result := Trim(Result);
end;


Использование:
Код:
procedure TForm1.Button1Click(Sender : TObject)
begin
  Edit2.Text := ProcessPhrase(Edit1.Text);
end;
Ответить с цитированием