Поменять местами слова в строке - 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.
Объяснение кода листинга программы
- Ввод строки из не менее чем 2 слов, разделенных пробелами
- Добавление пробелов в начало и в конец строки для удобства
- Подсчет количества слов в строке
- Ввод номеров слов для обмена
- Проверка корректности введенных номеров (n > 0, k > n, k <= q)
- Удаление первого пробела в строке
- Вставка первого слова (sn) в начало строки
- Удаление второго слова (sk) из строки
- Вставка второго слова (sk) в конец строки
- Удаление первого пробела в строке
- Вывод измененной строки