Раскодировать строку символов - Pascal ABC
Формулировка задачи:
Строка символов закодированный так, что буквы и числа идут парами (число показывает место буквы в тексте). Восстановить исходный текст.
то есть у нас есть слово чашки. мы должны вывести его на экран
в строку мы вводим 2а 3ш 1ч 5и 4к
нам нужно вывести слово
Решение задачи: «Раскодировать строку символов»
textual
Листинг программы
function explodeSpace( const s,f: string; num: integer ): string;
var
i,p,c: integer;
tmp: string;
begin
explodeSpace := '';
str(num , tmp);
tmp := ' '+tmp + ' ';
p := pos(tmp , s);
c := p + length(tmp) - 1;
if (p >= 1) AND ( s[ c + 1 ] = ' ' ) then begin
explodeSpace := f[c];
end;
end;
var
i: integer;
s,f,r,tmp: string;
begin
readln(s);
s := ' ' + s + ' ';
f := '';
for i:=1 to length(s) do
if (ord(s[i]) >= ord('0')) AND (ord(s[i]) <= ord('9')) then
f := f + s[i]
else
f := f + ' ';
i := 1;
while(true) do begin
tmp := explodeSpace(f , s , i);
if length(tmp) < 1 then break;
r := r + tmp;
i := i + 1;
end;
writeln( r );
end.
Объяснение кода листинга программы
- Функция
explodeSpaceпринимает три параметра: строкуs, функциюfи числоnum. Она возвращает новую строку, в которой символы, разделенные пробелом, заменены на те, которые указаны в функцииf. - Переменные
i,pиcиспользуются для поиска первого вхождения подстрокиtmpв строкеs. Переменнаяpсодержит позицию первого символа подстрокиtmpв строкеs, а переменнаяcсодержит позицию последнего символа подстрокиtmpв строкеs. - Если
pбольше или равно 1 и следующий символ в строкеs- это пробел, то функция присваивает переменнойexplodeSpaceзначение функцииfс индексомc. - В основной части программы используется цикл
while, который выполняется до тех пор, пока функцияexplodeSpaceвозвращает строку. На каждой итерации цикла функцияexplodeSpaceвызывается с функциейfи числомi, увеличиваемым на 1 на каждой итерации. Результат функцииexplodeSpaceдобавляется к переменнойr. - По завершении цикла выводится значение переменной
r.