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

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

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

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

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

textual
Листинг программы
  1. uses lazutf8classes, lazutf8; // эти модули нужно добавить в uses
  2.  
  3. // собственно, подпрограмма
  4. function Search(s : string; ch : string; k : integer) : string;
  5. var
  6.   L : TStringListUTF8;
  7.   t : string;
  8. begin
  9.   Result := '';
  10.   L := TStringListUTF8.Create;
  11.   L.StrictDelimiter := True;
  12.   L.Delimiter := ' ';
  13.   L.DelimitedText := s;
  14.   for t in L do if (Length(t) > k) and (UTF8Copy(t, 1, 1) = ch) then
  15.     if (Result = '') or (Length(Result) > Length(t)) then Result := t;
  16.   L.Free;
  17. end;
  18.  
  19. // и обработчик нажатия на кнопку
  20. procedure TForm1.Button1Click(Sender: TObject);
  21. var
  22.   c : string;
  23.   k, len : Integer;
  24. begin
  25.   c := InputBox('Ввод данных', 'Первый символ слова', 'п');
  26.   k := StrToInt(InputBox('Ввод данных', 'Номер строки для замены:', '4'));
  27.   len := StrToInt(InputBox('Ввод данных', 'Минимальная длина слова:', '5'));
  28.  
  29.   with TStringListUTF8.Create do
  30.   try
  31.     StrictDelimiter := True;
  32.     LoadFromFile('fin.txt');
  33.     if k < Count then Strings[Pred(k)] := Search(Strings[Pred(k)], c, len);
  34.     SaveToFile('out.txt');
  35.   finally
  36.     Free;
  37.   end;
  38. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы