Обработка символьных и строковых данных |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Обработка символьных и строковых данных |
annna |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 19 Репутация: 0 |
Дано несколько слов, в каждом из которых от одной до семи строчных букв, между соседними словами - не менее одного пробела, за последним словом точка. Напечатать слова в алфавитном порядке.
Заранее спасибо. |
BlackShadow |
Сообщение
#2
|
Гость |
Вроде это уже где-то было...
Код 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 |
Сообщение
#3
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Немного опоздал... но вот и мое решение:
Код 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. Сообщение отредактировано: APAL - -------------------- |
BlackShadow |
Сообщение
#4
|
Гость |
Я думаю, что лучше взять вариант APAL'а, т. к. он хоть и сложнее для объяснения, но скорее всего отлажен.
|
APAL |
Сообщение
#5
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Да, я его проверял. Потому и запоздал - ловил баги и тестировал...
-------------------- |
BlackShadow |
Сообщение
#6
|
Гость |
А я предложил метод "тупо в лоб". Разбываю на слова, сортирую и вывожу. Возможны только описки
|
APAL |
Сообщение
#7
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
А я сортировал просто индексы первых букв слов... :D
-------------------- |
annna |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 19 Репутация: 0 |
BlackShadow
APAL Tnx ;) |
BlackShadow |
Сообщение
#9
|
Гость |
Всегда пожалуйста
|
Текстовая версия | 23.12.2024 22:18 |