Читайте также: |
|
Эти действия постоянно выполняются при редактировании текста различными текстовыми процессорами. Использование процедур и функций для работы со строками превращает программирование подобных задач обработки текстов в довольно увлекательное занятие. В качестве примеров рассмотрим две небольшие задачи.
первая из них (листинг 9.5) позволит сократить размер текста без искаже-ия его содержания. Удалим из текста все незначащие пробелы (ведущие, шершающие и лишние между словами). Кроме того, заменим устойчивые эчетания типа "так как", "то есть" их аббревиатурами "т. к.", "т. е.". Сокра-[ение размеров текста особенно важно, например, при пересылке писем по чектронной почте.
Пистинг 9.5. Программа, сокращающая размер текста 5ез искажения содержания
$V-}{ отключили проверку полной совместимости типов }
ar s:string[80];{ формальный и фактический параметры разных типов }
•rocedure delspace(var s: string);
egin
{ пробелы удаляются до тех пор, пока функция роз выдает ненулевой результат при поиске двойного пробела в строке } while роз (' ',з}>0 do delete(з,роз(' ',s),l);
if s[l] = ' ' then delete (s,1,1); f удаляем пробел из начала строки } if sflength(s)J=' ' then delete(s,length (s),1); f и из конца } nd;
rocedure itd_itp(var s:string); Dnst a;array[1.. 4] of string[15] =
('и т. д,', 'и тому подобное1, 'т. к. ', 'т. е. '); al:array[I..4] of string[5]=('и т.д1, 'и т.п', 'т.к', 'т.е'); ie k,p:integer;:gin for k:=l to 4 do begin { сокращаем каждую из 4 фраз J
while роз(a[k],s)>0 do begin { пока встречается фраза }
p:=pos(a[k],s); (определяем номер первого символа фразы } delete(s,p,length(a[k])};{ удаляем фразу }
{ если после фразы стояла точка, то не добавляем последнюю '.') } if s[p]='.p then insert(al[k],s,p} else insert(al[k]+'.',s,p); end; end; id; fein
writeln('Введите строку текста:'); readln(s); delspace (s); itd_itp(s); writelnf'Сокращенный вариант:'); writeln(s); readln
'
торая программа (листинг 9.6) может несколько увеличить размер обраба-ываемой строки текста, т. к. она проверяет обязательное наличие пробела
после любого знака препинания. При отсутствии пробела она вставляет en в нужное место.
f............................................................................. •.................;................. v............................. •.....:.......
| Листинг 9,6. Программа, контролирующая наличие пробелов I после знаков препинания •'•.'
{ все знаки препинания поместили в служебную строку } const ch:string[6]='.,:;!?'; var s:string;
procedure insspace{var s:string); var k,1:integer; begin k:=l; repeat
for 1:=1 to 6 do
{ немного усложним условие, чтобы не забыть про многоточие или три восклицательных знака подряд }
if (s[k]=ch[l]) and (s[k+1]<>ch[1]) then insertf' ',s,k+l); k:=k+l;
until k=length(s);{ последний символ не рассматриваем, чтобы строка не оканчивалась пробелом } end; begin
writeln ('Введите строку текста:'); readln(s); insspace(s);
writeln{'Вставляем пробел после знаков препинания:'); writeln(s); readln end.
Дата добавления: 2015-11-14; просмотров: 53 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Процедуры преобразования типов | | | Преобразование строчных букв в заглавные |