Найти в строке первое слово, начинающееся с заданного символа, и не короче заданной длины - 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освобождается.