Удалить все знаки препинания из строки - 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
до первого прохода цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д