Обработка строк - Pascal (93272)

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

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

Всем привет. Помогите плз решить данную задачу. Задача: Рассматривается непустая строка, состоящая из не более, чем 80 символов. Каждый символ строки может быть малой английской буквой, цифрой или одним из символов +, -, *. Группой букв будет называться такая совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа знаков и цифр. Требуется написать программу, которая находит и печатает все такие группы букв, которые начинаются и заканчиваются одной и той же буквой. Группа букв, состоящая из одной буквы, принадлежит множеству искомых групп букв. Если в строке нет ни одной группы букв, которая начинается и кончается одной и той же буквой, то напечатать сообщение "В строке нет ни одной искомой группы букв". Если в строке нет ни одной группы букв, то напечатать сообщение "В строке нет ни одной группы букв". Исходная строка вводится с клавиатуры. Преподаватель сказал что нужно задать постоянную в которой перечислить весь англ.алфавит и потом только находить нужные группы букв. В общем я не понял, как в итоге решить эту задачу. Прошу помощи *help* Небольшое вознаграждение.

Решение задачи: «Обработка строк»

textual
Листинг программы
uses crt;
const ds=['a'..'z','0'..'9','+','-','*'];
      lb=['a'..'z'];
var s,s1:string[80];
    i,k,j,f1,f2:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите строку из малых латинских букв, цифр и знаков + - *');
writeln('                 длиной до 80 символов');
readln(s);
for i:=1 to length(s) do
if not(s[i] in ds) then
 begin
  writeln('Строка введена неверно, повторите ввод.');
  k:=1;
  break;
 end;
until k=0;
writeln('Группы букв, начинающиеся и оканчивающиеся на одну букву:');
i:=1;f1:=0;f2:=0;
while i<=length(s) do
if (s[i] in lb)and (not(s[i-1] in lb)or(i=1)) then{если буква, а перед ней не буква, или она первая}
 begin
  f1:=1;
  k:=i;s1:='';
  while (s[k] in lb)and(k<=length(s))do {пока буква и не конец строки}
   begin
    s1:=s1+s[k];
    k:=k+1;{идем вперед}
   end;
  if s1[1]=s1[length(s1)] then
   begin
    f2:=1;
    write(s1,' ');
   end;
  i:=i+length(s1);{перепрыгиваем}
 end
else i:=i+1;
if f1=0 then write('В строке нет ни одной группы букв')
else if f2=0 then write('В строке нет ни одной искомой группы букв');
readln
end.

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

  1. Установка начального значения переменной ds равным ['a'..'z','0'..'9','+','-','*'] - это набор символов, которые допустимы в строке.
  2. Установка начального значения переменной lb равным ['a'..'z'] - это набор символов, которые должны начинаться и заканчиваться группой.
  3. Объявление переменных s, s1: string[80] - это строки, которые используются в коде.
  4. Объявление переменных i, k, j, f1, f2: byte - это булевые переменные, используемые для контроля в цикле.
  5. Ввод строки с помощью readln(s) - пользователь вводит строку, которая сохраняется в переменной s.
  6. Проверка длины строки с помощью length(s) - это используется в цикле для контроля длины строки.
  7. Проверка каждого символа строки с помощью if not(s[i] in ds) then - это проверяет, что текущий символ не является допустимым символом.
  8. Если текущий символ не является допустимым, программа выводит сообщение об ошибке и прерывает цикл.
  9. Проверка каждой буквы в строке с помощью if (s[i] in lb)and (not(s[i-1] in lb)or(i=1)) then - это проверяет, что текущий символ является буквой и не является предыдущим символом.
  10. Если текущий символ является буквой и не является предыдущим символом, программа начинает новую группу.
  11. Цикл while проверяет каждую букву в группе, пока не достигнет конца строки.
  12. Если группа имеет длину больше 1 и является самообратной, программа добавляет ее в переменную s1.
  13. Если переменная f1 равна 0, программа выводит сообщение о том, что в строке нет групп.
  14. Если переменная f2 равна 0, программа выводит сообщение о том, что в строке нет искомой группы.

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

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