Найти в строке первое слово, начинающееся с заданного символа, и не короче заданной длины - 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;
Объяснение кода листинга программы
- В функции
Search
создается объектTStringListUTF8
для разделения исходной строки по пробелам. - Если длина слова больше
k
, и первый символ слова совпадает с заданным символом, то это слово добавляется в результат, если результат еще не определен или его длина меньше длины текущего слова. - В обработчике события
Button1Click
пользователю предлагается ввести первый символ слова, номер строки для замены и минимальную длину слова. - Создается объект
TStringListUTF8
для работы со строками. - Файл
fin.txt
загружается в объектTStringListUTF8
. - Если номер строки меньше количества строк в файле, то текущая строка заменяется результатом работы функции
Search
. - Файл
out.txt
сохраняется с обновленными данными. - Объект
TStringListUTF8
освобождается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д