Найти в строке первое слово, начинающееся с заданного символа, и не короче заданной длины - PascalABC.NET

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

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

Дано: в текстовом файле fin.txt находится текст на русском языке. С клавиатуры вводится символ C и число K. Требуется: написать подпрограмму, которая в заданной строке S находит первое самое короткое слово, начинающееся на символ C, но длина этого слова должна быть не меньше чем K символов (т.е. самое короткое из слов, не меньшее чем K символов). Например, если дана строка: "На лабораторной работе была поставлена задача проверки попадания заданной точки в указанную область на плоскости и расчет площади указанной области", символ 'п' и цифра 5, то получим "площади". Используя эту подпрограмму, сформировать текстовый файл fout.txt, K-ой строкой которого является строка, полученная описанным выше способом из К-ой строки файла fin.txt. Вывести полученный компонентный файл на экран.
Помогите пожалуйста

Решение задачи: «Найти в строке первое слово, начинающееся с заданного символа, и не короче заданной длины»

textual
Листинг программы
uses lazutf8classes, lazutf8; // эти модули нужно добавить в uses
 
// собственно, подпрограмма
function Search(s : string; ch : string; k : integer) : string;
var
  L : TStringListUTF8;
  t : string;
begin
  Result := '';
  L := TStringListUTF8.Create;
  L.StrictDelimiter := True;
  L.Delimiter := ' ';
  L.DelimitedText := s;
  for t in L do if (Length(t) > k) and (UTF8Copy(t, 1, 1) = ch) then
    if (Result = '') or (Length(Result) > Length(t)) then Result := t;
  L.Free;
end;
 
// и обработчик нажатия на кнопку
procedure TForm1.Button1Click(Sender: TObject);
var
  c : string;
  k, len : Integer;
begin
  c := InputBox('Ввод данных', 'Первый символ слова', 'п');
  k := StrToInt(InputBox('Ввод данных', 'Номер строки для замены:', '4'));
  len := StrToInt(InputBox('Ввод данных', 'Минимальная длина слова:', '5'));
 
  with TStringListUTF8.Create do
  try
    StrictDelimiter := True;
    LoadFromFile('fin.txt');
    if k < Count then Strings[Pred(k)] := Search(Strings[Pred(k)], c, len);
    SaveToFile('out.txt');
  finally
    Free;
  end;
end;

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

  1. В функции Search создается объект TStringListUTF8 для разделения исходной строки по пробелам.
  2. Если длина слова больше k, и первый символ слова совпадает с заданным символом, то это слово добавляется в результат, если результат еще не определен или его длина меньше длины текущего слова.
  3. В обработчике события Button1Click пользователю предлагается ввести первый символ слова, номер строки для замены и минимальную длину слова.
  4. Создается объект TStringListUTF8 для работы со строками.
  5. Файл fin.txt загружается в объект TStringListUTF8.
  6. Если номер строки меньше количества строк в файле, то текущая строка заменяется результатом работы функции Search.
  7. Файл out.txt сохраняется с обновленными данными.
  8. Объект TStringListUTF8 освобождается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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