Помощь - Поиск - Пользователи - Календарь
Полная версия: Интересная задача на строковый тип данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rocket
good.gif Помогите пожалуйста написать программу:
Дана строка, состоящая из русских слов, разделённых пробелами (одним или несколькими).
Вывести строку, содержащую эти же слова, но расположенные в обратном алфавитном порядке.
volvo
Эта задача интересна для тебя... Для других - нет, потому, что уже решена. Ищи...
Rocket
Цитата(volvo @ 6.12.2006 19:50) *

Эта задача интересна для тебя... Для других - нет, потому, что уже решена. Ищи...

А ты знаешь, где она есть? Где искать?
Подскажи как решать.
Rocket
Я искал, но ничего подобного не нашёл.
Какие хоть у кого есть мысли!
klem4
И что же ты искал ?

Поиск -> "обратном алфавитном порядке"



Разбиение на слова. Все способы.

Простейший вариант: Получаешь массив слов, и выводишь его с конца
По сложнее: "развертывешь" строку "на ходу" c конца и выводишь слова.

Все это есть в приведенной ссылке.
volvo
Цитата
Получаешь массив слов, и выводишь его с конца
Не совсем...

Получаешь массив - Да, потом - сортируешь по убыванию, и только потом выводишь smile.gif
klem4
yes2.gif

Мой нещастный мозг почемуто интерпритировал задание как "вывести слова строки в обратном порядке", volvo естественно прав.
Rocket
Ребятушки! Программистушки! Нужно решать непосредственно со строкой, а не разворачивать её в массив.
Светлая голова найдётся? Задачу нужно решить позарез!
klem4
Ты читать умеешь ?

Цитата
"развертывешь" строку "на ходу" c конца и выводишь слова.


Где тут хоть одно слово о массиве ?


погорячился я что-то.
volvo
Цитата
Нужно решать непосредственно со строкой, а не разворачивать её в массив.
Ты сам хотел...
var
s, _word, _max: string;
i, start: integer;
finished: boolean;

begin
write('s = '); readln(s);

s := s + ' ';
repeat
finished := true;
_word := ''; _max := '';

for i := 1 to length(s) do begin

if s[i] = ' ' then begin
if _word > _max then begin

start := i - length(_word);
_max := _word;

end;
_word := '';
end
else begin
_word := _word + s[i];
finished := false;
end;

end;

if not finished then begin
delete(s, start, length(_max));
write(_max: length(_max) + 1);
end
else writeln;

until finished;
end.

Rocket
Большое спасибо и бесконечный respect Volvo. good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.