Найти в тексте все слова, которые содержат хотя бы один фрагмент заданного вида - Turbo Pascal

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

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

Сама задача: Найти в тексте все слова, которые содержат хотя бы один фрагмент заданного вида. Подсчитать их количество и выделить в исходном тексте другим цветом как слова, так содержащиеся в них фрагменты.
Эта программа находит кол-во фрагментов. Как ее дополнить, чтобы она выводила текст с покрашенными фрагментами? Заранее, спасибо.

Решение задачи: «Найти в тексте все слова, которые содержат хотя бы один фрагмент заданного вида»

textual
Листинг программы
uses crt;
const rz=[' ','.',',','-','?','!'];{символы, разделители слов, можно добавить}
var s,f,s1:string;
    a:array[byte] of byte;{массив цветов букв}
    n,i,j,k,p,q:byte;
begin
clrscr;
writeln('Введите текст');
readln(s);
writeln('Введите фрагмент');
readln(f);
n:=length(s);
for i:=1 to n do
a[i]:=7; {установим цвет символов строки}
i:=1;{начнем со 2 символа}
while i<=n do {пока не конец}
if not(s[i] in rz)and ((i=1)or(s[i-1] in rz)) then{если не разделитель
                                и это первый символ или перед ним разделитель,
                                то начало слова}
 begin
  k:=i;
  s1:='';{составим очередное слово}
  while (k<=n) and not(s[k] in rz) do {пока не разделитель и не конец строки}
   begin
    s1:=s1+s[k];
    k:=k+1;
   end;
  if pos(f,s1)>0 then {если в слове есть фрагмент}
   begin
    q:=q+1;{считаем его}
    j:=i; {начинаем менять цвет букв}
    repeat
    if copy(s,j,length(f))=f then {во фрагментах}
     begin
      for p:=j to j+length(f)-1 do a[p]:=13;
      j:=j+length(f);
     end
    else  {в остальных буквах}
     begin
      a[j]:=12;
      j:=j+1;
     end;
    until j>i+length(s1);
   end;
  i:=i+length(s1);
 end
else i:=i+1;{пропускаем разделители}
if q=0 then write('Нет слов содержащих фрагменты ',f)
else {выведем раскрашеную строку}
for i:=1 to length(s) do
 begin
  textcolor(a[i]);
  write(s[i]);
 end;
readln
end.

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

  1. В начале объявляются все необходимые переменные, включая строку для ввода текста и фрагмента, а также массив цветов букв.
  2. Затем происходит чтение текста из введенной строки и фрагмента.
  3. Для каждого символа введенного текста устанавливается соответствующий цвет.
  4. Далее идет цикл, который проверяет каждый символ введенного текста. Если символ не является разделителем и начинается новое слово, то это слово добавляется в переменную s1.
  5. Если в добавленном слове есть фрагмент, то он подсчитывается и начинается изменение цвета букв этого фрагмента.
  6. После окончания подсчета фрагментов изменяется цвет всех букв в слове.
  7. Цикл продолжается до тех пор, пока не будет достигнут конец строки или не будет найден разделитель.
  8. После завершения цикла выводится раскрашенная строка.
  9. В конце программы сбрасывается цвет текста.

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

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