Поиск повторяющихся символов в строках - Pascal

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

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

Ребята помогите пожалуйста вот такую задачку решить: Выбрать из каждой символьной строки исходного массива только те символы, которые встречаются в ней более одного раза и сформировать результирующий массив, не включая строки, в которых не оказалось повторяющихся символов. (пробелы не учитывать). Я сам пробовал но пока безрезультатно...

Решение задачи: «Поиск повторяющихся символов в строках»

textual
Листинг программы
uses crt;
const nmax=20;
var m1,m2:array[1..nmax]of string;
    n,i,j,k,p,l:byte;
    mn:set of char;
begin
clrscr;
writeln('Vvedite stroki simvolov, okoncanie vvoda *');
n:=0;
repeat
inc(n);
write('Stroka ',n,': ');
readln(m1[n]);
until (m1[n]='*')or (n=nmax);
writeln;
writeln('Simvoly > 1 raza:');
p:=0;
for i:=1 to n do {идем по массиву}
  begin
    while pos(' ',m1[i])>0 do {пока в текущей строке есть пробелы}
    delete(m1[i],pos(' ',m1[i]),1);{удаляем из нее пробелы}
    write('stroka ',i,': ');
    k:=0;mn:=[];{счетчик совпадений символа=0, множество символов пустое}
    for j:=1 to length(m1[i])-1 do{идем по очередной строке}
    for l:=j+1 to length(m1[i]) do{по ее "клону" со следующего символа}
    if (m1[i][j]=m1[i][l])and not(m1[i][j] in mn) then{если символ совпал и его еще нет в множестве}
      begin
        k:=1;{фиксируем}
        write(m1[i][j],' ');{выводим в строку}
        mn:=mn+[m1[i][j]];{включаем в множество}
      end;
    if k=0 then write('Takih simvolov net!'){если нет таких, сообщаем}
    else if k=1 then{если есть}
        begin
          inc(p);{увеличиваем счетчик нового массива}
          m2[p]:=m1[i];{заносим в него строку}
        end;
    writeln;
  end;
Writeln('Massiv m2:');{}
for i:=1 to p do
writeln(m2[i]);
readln
end.

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

  1. Создается массив m1 типа array[1..nmax]of string, который будет хранить введенные пользователем строки.
  2. Создается переменная n типа byte, которая будет отслеживать количество введенных строк.
  3. Создается цикл repeat, который будет продолжаться до тех пор, пока введенная пользователем строка не будет содержать символ *.
  4. Внутри цикла repeat каждая строка вводится в переменную m1[n].
  5. После выхода из цикла repeat выводится сообщение о том, что введено более 1 символа.
  6. Создается переменная p типа byte, которая будет отслеживать количество уникальных символов во всех введенных строках.
  7. Запускается цикл for, который будет проходить по всем символам в каждой строке.
  8. Внутри цикла for проверяется, есть ли в текущей строке пробелы. Если есть, то они удаляются.
  9. Выводится текущая строка.
  10. Создается множество mn типа set of char, которое будет использоваться для отслеживания уникальных символов.
  11. Запускается внутренний цикл for, который будет проходить по всем символам в текущей строке.
  12. Если текущий символ совпадает с символом в следующей строке и его еще нет в множестве mn, то он добавляется в множество и выводится.
  13. Если после прохождения всех символов в текущей строке не было найдено совпадений, выводится сообщение об этом.
  14. Если было найдено хотя бы одно совпадение, то увеличивается счетчик p и текущая строка добавляется в массив m2.
  15. После выхода из цикла for выводится сообщение о том, что был получен массив m2.
  16. Выводится массив m2.

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


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

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

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