Удалить все знаки препинания из строки - 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.

Объяснение кода листинга программы

  1. В первой процедуре split мы разделяем строку s на массив строк sr по указанному разделителю delimeter.
  2. Во второй процедуре printarray мы выводим каждый элемент массива t на новой строке.
  3. В основной части программы мы сначала разделяем введенную пользователем строку на массив строк a по разделителю .,- :;.
  4. Затем мы объединяем все элементы массива a в одну строку s без разделителей.
  5. Выводим на экран эту строку.
  6. Затем мы выводим каждый элемент массива a в нижнем регистре.
  7. Мы сортируем элементы массива a в порядке возрастания верхнего регистра.
  8. Затем мы выводим отсортированный массив a и запрашиваем у пользователя ввод.
  9. Мы повторяем шаги 3-8 для массива b, который является копией массива a до первого прохода цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы