В исходной строке а определить количество слов содержащих ровно п символов строки х.

0 голосов
36 просмотров

В исходной строке а определить количество слов содержащих ровно п символов строки х.


Информатика (15 баллов) | 36 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Const
  delim = [' ', ',', '.', ':', ';', '!', '?'];{Набор разделителей}

procedure GetWord(s: string; var ib: integer; var pWord: string; var l: integer);
// Возвращает слово pWord, которое является подстрокой s
// Разделителем слов являются один или более символов из delim.
// ib при вызове процедуры указывает на позицию в строке s,
// начиная с которой ведется поиск слова.
// При выходе из процедуры ib - позиция начала найденного слова,
// l- длина найденного слова, l=0 если слово не найдено.
var
  i, n: integer;
  w: string;
begin
  n := Length(s);
  l := 0;
  w := '';
  if ib >= n then begin
    ib := n;
    pWord := ''
  end
  else begin
    i := ib;
    while (s[i] in delim) and (i < n) do i := i + 1;
    ib := i;
    w := '';
    while (not (s[i] in delim)) and (i < n) do
    begin
      w := w + s[i];
      i := i + 1
    end;
    if i < n then begin
      l := i - ib;
      pWord := w
    end
    else begin
      l := i - ib + 1;
      pWord := w + s[n]
    end
  end
end;

var
  w, x, a: string;
  n, k, i: integer;

begin
  write('Введите длину искомых слов n: ');
  readln(n);
  writeln('Введите строку с искомыми словами (где искать):');
  readln(a);
  writeln('Введите строку с шаблоном поиска (что искать):');
  readln(x);
  writeln('Результаты поиска:');
  i := 1;
  repeat
    GetWord(a, i, w, k);
    if k = n then
    begin
      if Pos(w, x) > 0 then writeln(w);
    end;
    i := i + k
  until k = 0;
end.

Тестовое решение:

Введите длину искомых слов n: 4
Введите строку с искомыми словами (где искать):
Мама мыла раму, Маша мыла полы, а Таня не мыла ничего!
Введите строку с шаблоном поиска (что искать):
Даша перемыла всю посуду.
Результаты поиска:
мыла
мыла
мыла



(142k баллов)