Вот:
Код:
VAR
S,S1:String;
S2:Array[1..130] of String;
i,i1,i2,j,k:Byte;
BEGIN
WriteLn('Enter the string:');
ReadLn(S);
WriteLn;
i:=0;
k:=0;
Repeat
Repeat
Inc(i);
Until S[i]<>' ';
i1:=i;
Repeat
Inc(i);
Until (S[i]=' ') or (i=Length(S));
If S[i]=' ' then i2:=i else i2:=i+1;
Inc(k);
S2[k]:=Copy(S,i1,(i2-i1));
Until i=Length(S);
WriteLn;
WriteLn;
For i:=1 to k do
For j:=1 to k-i do
If Length(S2[j])>Length(S2[j+1]) then
begin
S1:=S2[j+1];
S2[j+1]:=S2[j];
S2[j]:=S1;
end;
For i:=1 to k do
Write(S2[i]+' ');
WriteLn;
ReadLn;
END.
Пояснения:
1. Вводится строка (которая даже может начинаться с пробелов).
2. Организуется цикл последовательного перебора символов строки.
3. Последовательно вычленяются слова. Сперва ищется номер символа, не являющегося пробелом (i1), затем перебор продолжается до первого пробела или конца строки. Номер такого символа есть i2. Таким образом, определяются номера символов-границ очередного слова.
4. Очередное найденное слово вычленяется командой Copy и заносится в массив S2.
5. Методом "пузырька" массив упорядочивается по длинам слов.
Устроит?