Дана строка состоящая из русских слов, разделенными пробелами(одним или несколькими). Вывести строку содержащую эти же слова (разделенные одним пробелом), но расположенные в алфавитном порядке.Если есть пробелы более одного, то нужно, сделать везде по одному, и дальше сортировка… — Pascal (Паскаль)


CONST
 max_words = 120;
VAR
  S, temp: String;
  s_array: array[1..max_words] of String; {Сюда слова копировать будем}
  count: Integer;
  i, j, len, beg_of_word : Integer;
BEGIN
{  WriteLn('Введите строку:');
  ReadLn(s);}
  s := 'hfdh ashj aasd  dh  ';
  while (s <>'') and (POS('  ',s)<>0) do
   delete(s, POS('  ',s), 1);
   {Так легко удаляются все парные пробелы, хотя зачем это здесь?
    Я предлагаю простой способ: переписать все слова в массив,
    а затем все будет просто
    Без массива будет чуть-чуть побольше возни}

  i:=1;
  len := length(s);
  count := 0; {Число обработанных слов - нужно для "хорошего" вывода, если
               слов ввобще нет - одни пробелы или пустая строка}
  while i < len do
  begin
    if s[i] <> ' 'then
    begin
      inc(count);
      beg_of_word := i;
      s_array[count] := '';
      while (s[i] <> ' ') and (i < len) do
      begin
        s_array[count] := s_array[count] + s[i];
        inc(i);
      end;
    end;
    inc(i);
  end;
  if count <> 0 then
  begin
   {Обычный метод пузырьковой сортировки}
   for i:=1 to count-1 do
     for j:=i+1 to count do
        if s_array[j] < s_array[i] then
        begin
          temp := s_array[j];
          s_array[j] := s_array[i];
          s_array[i] := temp
        end
  end;
  WriteLn(s);
  for i:=1 to count do
    Write(s_array[i],' ');
  WriteLn;
END.

Leave a Comment

85 − = 78