Удалить все знаки препинания из строки - Free Pascal
Формулировка задачи:
1. С клавиатуры, или из самой программы, или из файла в строковую переменную вносится некоторый текст. Это предложение на английском языке. Программа редактирует английское предложение так, что не оставляет в нем ни одного знака препинания. Ни точки, ни запятой, и тире, ни прочих знаков не должно быть. Мало того, между двумя соседними словами должно быть не более одного пробела.
2. Эта программа берет уже отредактированную строку из первой задачи и делает из полученной строки массив английских слов в том порядке, как они расположены в предложении. В возвращаемом массиве слов пробелов быть не должно.
3. Небольшая программа получает массив слов из предыдущей задачи и делает так, чтобы все слова начинались со строчных букв.
4. Эта программа на входе имеет «очищенный» массив слов предложения, заданного в первой задаче. Однако в исходном массиве могут встречаться повторяющиеся слова. Задача программы – из исходного массива сделать массив неповторяющихся слов.
5. Наконец, эта программа должна сортировать массив слов по алфавиту.
Все программы можно попробовать реализовать в модуле как методы строкового объекта. Значение всех этих программ – облегчение перевода английского текста путем создания небольшого вспомогательного словаря. Не секрет, что современные автоматические переводчики не всегда улавливают семантику текста, его смысл.
Решение задачи: «Удалить все знаки препинания из строки»
textual
Листинг программы
- type sar=array of string;
- var
- s:string;
- a,b:sar;
- i,j,k:integer;
- ok:boolean;
- procedure split(delimeter:string;s:string;var sr:sar);
- var
- cnt, i:integer;
- t:string;
- procedure additem;
- begin
- if t<>'' then begin
- inc(cnt);
- SetLength(sr,cnt);
- sr[cnt-1]:=t;
- t:='';
- end;
- end;
- begin
- cnt:=0;t:='';
- for i:=1 to length(s) do
- if pos(s[i],delimeter)=0 then t:=t+s[i] else additem;
- additem;
- end;
- procedure printarray(s:string;t:sar);
- var
- i:integer;
- begin
- writeln(s);
- for i:=low(t) to high(t) do writeln(t[i]);
- readln;
- end;
- begin
- write('Введите строку:');readln(s);
- Split('.,- :;',s,a);
- s:='';
- for i:=low(a) to high(a) do s:=s+a[i]+' ';
- writeln('1)',#10,#13,s); readln;
- printarray('2)',a);
- writeln('3)');
- for i:=low(a) to High(a) do writeln(lowercase(a[i][1])+copy(a[i],2,length(a[i])));
- readln;
- k:=0;
- for i:=low(a) to high(a) do begin
- for j:=i to high(a) do
- if (upcase(a[i])>upcase(a[j])) then begin
- s:=a[i];
- a[i]:=a[j];
- a[j]:=s;
- end;
- if (k=0) or (a[i]<>b[k-1]) then begin
- k:=k+1;
- setlength(b,k);
- b[k-1]:=a[i];
- end;
- end;
- printarray('4)',b);
- printarray('5)',a);
- end.
Объяснение кода листинга программы
- В первой процедуре
split
мы разделяем строкуs
на массив строкsr
по указанному разделителюdelimeter
. - Во второй процедуре
printarray
мы выводим каждый элемент массиваt
на новой строке. - В основной части программы мы сначала разделяем введенную пользователем строку на массив строк
a
по разделителю.,- :;
. - Затем мы объединяем все элементы массива
a
в одну строкуs
без разделителей. - Выводим на экран эту строку.
- Затем мы выводим каждый элемент массива
a
в нижнем регистре. - Мы сортируем элементы массива
a
в порядке возрастания верхнего регистра. - Затем мы выводим отсортированный массив
a
и запрашиваем у пользователя ввод. - Мы повторяем шаги 3-8 для массива
b
, который является копией массиваa
до первого прохода цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д