Удалить все знаки препинания из строки - Free Pascal

Узнай цену своей работы

Формулировка задачи:

1. С клавиатуры, или из самой программы, или из файла в строковую переменную вносится некоторый текст. Это предложение на английском языке. Программа редактирует английское предложение так, что не оставляет в нем ни одного знака препинания. Ни точки, ни запятой, и тире, ни прочих знаков не должно быть. Мало того, между двумя соседними словами должно быть не более одного пробела. 2. Эта программа берет уже отредактированную строку из первой задачи и делает из полученной строки массив английских слов в том порядке, как они расположены в предложении. В возвращаемом массиве слов пробелов быть не должно. 3. Небольшая программа получает массив слов из предыдущей задачи и делает так, чтобы все слова начинались со строчных букв. 4. Эта программа на входе имеет «очищенный» массив слов предложения, заданного в первой задаче. Однако в исходном массиве могут встречаться повторяющиеся слова. Задача программы – из исходного массива сделать массив неповторяющихся слов. 5. Наконец, эта программа должна сортировать массив слов по алфавиту. Все программы можно попробовать реализовать в модуле как методы строкового объекта. Значение всех этих программ – облегчение перевода английского текста путем создания небольшого вспомогательного словаря. Не секрет, что современные автоматические переводчики не всегда улавливают семантику текста, его смысл.

Решение задачи: «Удалить все знаки препинания из строки»

textual
Листинг программы
  1. type sar=array of string;
  2. var
  3.   s:string;
  4.   a,b:sar;
  5.   i,j,k:integer;
  6.   ok:boolean;
  7. procedure split(delimeter:string;s:string;var sr:sar);
  8. var
  9.   cnt, i:integer;
  10.   t:string;
  11. procedure additem;
  12. begin
  13.  if t<>'' then begin
  14.   inc(cnt);
  15.   SetLength(sr,cnt);
  16.   sr[cnt-1]:=t;
  17.   t:='';
  18.  end;
  19. end;
  20. begin
  21.   cnt:=0;t:='';
  22.   for i:=1 to length(s) do
  23.     if pos(s[i],delimeter)=0 then t:=t+s[i] else additem;
  24.     additem;
  25. end;
  26. procedure printarray(s:string;t:sar);
  27. var
  28.   i:integer;
  29. begin
  30.   writeln(s);
  31.   for i:=low(t) to high(t) do writeln(t[i]);
  32.   readln;
  33. end;
  34. begin
  35.   write('Введите строку:');readln(s);
  36.   Split('.,- :;',s,a);
  37.   s:='';
  38.   for i:=low(a) to high(a) do s:=s+a[i]+' ';
  39.   writeln('1)',#10,#13,s); readln;
  40.   printarray('2)',a);
  41.   writeln('3)');
  42.   for i:=low(a) to High(a) do writeln(lowercase(a[i][1])+copy(a[i],2,length(a[i])));
  43.   readln;
  44.    k:=0;
  45.   for i:=low(a) to high(a) do begin
  46.     for j:=i to high(a) do
  47.       if (upcase(a[i])>upcase(a[j])) then begin
  48.         s:=a[i];
  49.         a[i]:=a[j];
  50.         a[j]:=s;
  51.       end;
  52.     if (k=0) or (a[i]<>b[k-1]) then begin
  53.       k:=k+1;
  54.       setlength(b,k);
  55.       b[k-1]:=a[i];
  56.     end;
  57.   end;
  58.   printarray('4)',b);
  59.   printarray('5)',a);
  60. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы