Найти последнее вхождение некоторой подстроки в строке - Turbo Pascal
Формулировка задачи:
пожалуйста помогите. дан текст из нескольких строк. предлагается: 1) найти последнее вхождение некоторой подстроки в строке (подстрока и номер строки, в которой осуществляется поиск, вводятся пользователем и являются параметрами функции).
2)удалить из строки определенное количество завершающих символов (номер строки, количество символов вводятся пользователем)
Решение задачи: «Найти последнее вхождение некоторой подстроки в строке»
textual
Листинг программы
Type MyString = String; mas = Array [1..30] of MyString; Var st: mas; i,n,nom,kl: Byte; sub: MyString; {---------} Function LastPos(substr: MyString; num: Integer): Byte; var s, space: MyString; k: Byte; begin k:=0; space:=''; s:=st[num]; While Pos(substr,s)<>0 do begin k:=Pos(substr,s); For i:=1 to Length(substr) do space:=space+#0; Delete(s,Pos(substr,s),Length(Copy(s,Pos(substr,s),Length(substr)))); s:=space+s; space:=''; end; LastPos:=k; end; {---------} Function DeleteSymbols(num: Integer; kol: Byte): MyString; var s: MyString; begin If kol<=Length(st[num]) Then begin s:=st[num]; Delete(s,Length(s)-kol+1,kol); end; DeleteSymbols:=s; end; {---------} BEGIN Writeln('Введите кол-во строк: '); Readln(n); Writeln('Введите ',n,' строк:'); For i:=1 to n do Readln(st[i]); Writeln('Введите подстроку и номер строки: '); Readln(sub,nom); If LastPos(sub,nom)=0 Then Writeln('Такой подстроки нет') Else Writeln('Позиция последней подстроки = ',LastPos(sub,nom)); Writeln('Введите номер строки и количество завершающих символов, кот. необходимо удалить: '); Readln(nom,kl); Writeln('Полученная строка: ',DeleteSymbols(nom,kl)); Readln END.
Объяснение кода листинга программы
- В функции
LastPos
объявлены переменныеs
,space
иk
. Переменнаяs
инициализируется значениемst[num]
, гдеnum
- это параметр функции. Переменнаяspace
инициализируется пустой строкой. Переменнаяk
инициализируется значением позиции первого вхождения подстроки в строкеs
. - В цикле
While
происходит следующее:k
обновляется с новым значением, полученным от функцииPos
. Это значение - позиция первого вхождения подстроки в строкеs
.- Затем происходит цикл
For
, который проходит по каждому символу подстрокиsubstr
. - Для каждого символа подстроки, переменная
space
обновляется путем добавления символа подстроки к текущему значению переменнойspace
. - Затем происходит удаление подстроки из строки
s
с помощью функцииDelete
. Эта функция удаляет подстроку из строкиs
, начиная с позицииpos
, и длинойlen
. - После завершения цикла
For
, переменнаяspace
обновляется с новым значением, полученным от функцииPos
. Это значение - позиция последнего вхождения подстроки в строкеs
. - Наконец, функция
LastPos
возвращает значениеk
.
- В функции
DeleteSymbols
объявлены переменныеs
иkol
. Переменнаяs
инициализируется значениемst[num]
, гдеnum
- это параметр функции. Переменнаяkol
инициализируется значением, введенным пользователем. - Если
kol
меньше или равно длине строкиs
, то выполняется следующий код:- Строка
s
обновляется путем удаленияkol
символов из начала строки. Это делается с помощью функцииDelete
. - Затем переменная
s
обновляется с новым значением, полученным от функцииPos
. Это значение - позиция начала строки после удаленияkol
символов. - Функция
DeleteSymbols
возвращает обновленную строкуs
.
- Строка
- В основной программе:
- Выводится запрос на ввод количества строк.
- Запрашивается количество строк и сохраняется в переменной
n
. - Для каждой строки в массиве
st
выполняется:- Выводится запрос на ввод подстроки и номера строки.
- Вызывается функция
LastPos
с подстрокой и номером строки в качестве параметров. Результат функции выводится на экран. - Вызывается функция
DeleteSymbols
с номером строки и количеством завершающих символов, которые нужно удалить, в качестве параметров. Результат функции выводится на экран.
- Программа завершается с помощью функции
Readln
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д