Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Обработка символьных и строковых данных

Автор: annna 26.05.2004 23:44

Дано несколько слов, в каждом из которых от одной до семи строчных букв, между соседними словами - не менее одного пробела, за последним словом точка. Напечатать слова в алфавитном порядке.
Заранее спасибо.

Автор: BlackShadow 27.05.2004 15:59

Вроде это уже где-то было...

Код

Var
 Words:Array[1..100] Of String[7];
 Count:Integer;
 min,s:String;
 i,j,k:Integer;

Begin
 ReadLn(s);
 i:=1;
 While i<=Length(s) Do
 Begin
   While (i<=Length(s)) And (s[i]=' ') Do
     Inc(i);
   If i>Length(s) Then
     Break;
   j:=i+1;
   While (j<=Length(s)) And (s[j]=' ') Do
     Inc(j);
   Inc(Count);
   Words[Count]:=Copy(s,i,j-i)
 End;
 For i:=1 To Count-1 Do
 Begin
   k:=i;
   min:=s[i];
   For j:=i+1 To Count Do
     If Words[j]<min Then
     Begin
       k:=j;
       min:=Words[j]
     End;
   If k<>i Then
   Begin
     s[k]:=s[i];
     s[i]:=min
   End
 End;
 For i:=1 To Count Do
   WriteLn(s[i])
End.

Автор: APAL 27.05.2004 18:36

Немного опоздал... smile.gif но вот и мое решение:

Код
Const
 src : String = '  вот тестовая строка которая содержит несколько слов.  ';
Var
 m           : array [1..30] of Byte;
 index,i,j,t : Byte;
Begin
 Index:=0;
 If src[1]<>' ' then
 Begin
   Inc(Index);
   m[Index]:=1;
 End;
 For i:=2 to Length(src) do
   If (src[i]<>' ') and (src[i-1]=' ') then
   Begin
     Inc(Index);
     m[Index]:=i;
   End;
 For j:=1 to Index-1 do
   For i:=j+1
    to Index do
   If src[m[i]]<src[m[j]] then
   Begin
     t:=m[i];
     m[i]:=m[j];
     m[j]:=t;
   End;
 For i:=1 to Index do
 Begin
   j:=0;
   While (src[m[i]+j]<>' ') and (src[m[i]+j]<>'.') do
   Begin
     Write(src[m[i]+j]);
     Inc(j);
   End;
   Writeln;
 End;
End.

Автор: BlackShadow 27.05.2004 18:59

Я думаю, что лучше взять вариант APAL'а, т. к. он хоть и сложнее для объяснения, но скорее всего отлажен.

Автор: APAL 27.05.2004 19:02

Да, я его проверял. Потому и запоздал - ловил баги и тестировал... smile.gif

Автор: BlackShadow 27.05.2004 19:06

А я предложил метод "тупо в лоб". Разбываю на слова, сортирую и вывожу. Возможны только опискиsmile.gif

Автор: APAL 27.05.2004 19:21

А я сортировал просто индексы первых букв слов... :D

Автор: annna 27.05.2004 19:22

BlackShadow
APAL
Tnx ;)

Автор: BlackShadow 27.05.2004 19:26

Всегда пожалуйста smile.gif