Поменять местами слова в строке - Pascal (251099)

Узнай цену своей работы

Формулировка задачи:

Как такая программка пишется ? Мы должны поменять слова с номерами n и k. Я пытался , но безуспешно.
Идея есть. Я должен найти эти два слова . Найти их позицию и вставить в новую строку уже в обратном порядке. Но вот как все это грамотно написать я пока не додумал.
При этом я делал так , что я вводил строку и вводил 2 слова которые нужно поменять. Но не знаю правильно ли так или нет.

Решение задачи: «Поменять местами слова в строке»

textual
Листинг программы
var s,s1,sn,sk:string;
    i,j,q,n,k,ni,ki:integer;
begin
writeln('Введите строку из не менее чем 2 слов, разделенных пробелами');
readln(s);
s:=' '+s+' '; //добавим пробелы в начало и в конец для удобства
//подсчитаем слова
q:=0;
for i:=2 to length(s)-1 do
if (s[i]<>' ')and(s[i-1]=' ') then q:=q+1;//если не пробел, а перед ним пробел, новое слово
repeat
writeln('Введите номера слов для обмена 0<n<k<=q');
readln(n,k);
until(n>0)and(k>n)and(k<=q);
q:=0;
for i:=2 to length(s)-1 do
if (s[i]<>' ')and(s[i-1]=' ') then
 begin
  q:=q+1;//считаем слова
  s1:='';
  j:=i;
  while(j<=length(s))and(s[j]<>' ') do //составим его
   begin
    s1:=s1+s[j];
    j:=j+1;
   end;
  if q=n then
   begin
    sn:=s1;
    ni:=i;
   end
  else if q=k then
   begin
    sk:=s1;
    ki:=i;
   end;
 end;
delete(s,ki,length(sk));//удалим сначала второе
insert(sn,s,ki);//вставим первое
delete(s,ni,length(sn));//потом удалим первое
insert(sk,s,ni); //вставим второе
delete(s,1,1); //удалим первый пробел
write(s);
end.

Объяснение кода листинга программы

  1. Ввод строки из не менее чем 2 слов, разделенных пробелами
  2. Добавление пробелов в начало и в конец строки для удобства
  3. Подсчет количества слов в строке
  4. Ввод номеров слов для обмена
  5. Проверка корректности введенных номеров (n > 0, k > n, k <= q)
  6. Удаление первого пробела в строке
  7. Вставка первого слова (sn) в начало строки
  8. Удаление второго слова (sk) из строки
  9. Вставка второго слова (sk) в конец строки
  10. Удаление первого пробела в строке
  11. Вывод измененной строки

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы