Помощь - Поиск - Пользователи - Календарь
Полная версия: Интересная задача на строковый тип данных
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.