Поиск повторяющихся символов в строках - 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.
Объяснение кода листинга программы
- Создается массив
m1
типаarray[1..nmax]of string
, который будет хранить введенные пользователем строки. - Создается переменная
n
типаbyte
, которая будет отслеживать количество введенных строк. - Создается цикл
repeat
, который будет продолжаться до тех пор, пока введенная пользователем строка не будет содержать символ*
. - Внутри цикла
repeat
каждая строка вводится в переменнуюm1[n]
. - После выхода из цикла
repeat
выводится сообщение о том, что введено более 1 символа. - Создается переменная
p
типаbyte
, которая будет отслеживать количество уникальных символов во всех введенных строках. - Запускается цикл
for
, который будет проходить по всем символам в каждой строке. - Внутри цикла
for
проверяется, есть ли в текущей строке пробелы. Если есть, то они удаляются. - Выводится текущая строка.
- Создается множество
mn
типаset of char
, которое будет использоваться для отслеживания уникальных символов. - Запускается внутренний цикл
for
, который будет проходить по всем символам в текущей строке. - Если текущий символ совпадает с символом в следующей строке и его еще нет в множестве
mn
, то он добавляется в множество и выводится. - Если после прохождения всех символов в текущей строке не было найдено совпадений, выводится сообщение об этом.
- Если было найдено хотя бы одно совпадение, то увеличивается счетчик
p
и текущая строка добавляется в массивm2
. - После выхода из цикла
for
выводится сообщение о том, что был получен массивm2
. - Выводится массив
m2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д