Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на сравнение 2-ух строк посимвольно.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
siriuz
Задача: Даны два текста T1 оригинал и T2 копия с искажениями. Текст Т1 состоит из слов русского языка раздеренных пробелами, причем число пробелов между соседними словами может быть больше одного. В тексте Т2 число пробелов между словами может быть больше или меньше по сравнению с Т1. Кроме того в некоторых словах в Т2 вставлены лишние буквы. Требуется найти все искаженные слова и перечислить для каждого такого слова все лишние буквы.

Вот собственно мои наработки (Почти все взял с этого ресурса), вроде бы сделал все правильно но результат не выводит, видимо что то не так с последним циклом или с записью слов в массивы:

const limits = ['.',',',':',';','!','?','"'];
var T1,T2,b1,b2:string; i,j,c,p,p1,n,back:integer; bc1,bc2,lishnee:array[1..100] of string;
begin
Writeln('Введите Т1 - оригинал:');
readln(t1);
writeln('Введите Т2 - копию с искажениями:');
readln(t2);
for i:=1 to length(t1) do begin
if t1[i] In limits then t1[i]:= #32; end;
for i:=1 to length(t2) do begin
if t2[i] In limits then t2[i]:= #32;
end;
repeat
p := Pos(' ', t2);
if p > 0 then Delete(t2, p, 1)
until p = 0;
repeat
p1 := Pos(' ', t1);
if p1 > 0 then Delete(t1, p1, 1)
until p1 = 0;
if t1[1] = ' ' then Delete(t1, 1, 1);
if t2[1] = ' ' then Delete(t2, 1, 1);
if t1[Length(t1)] = ' ' then Delete(t1, Length(t1), 1);
if t2[Length(t2)] = ' ' then Delete(t2, Length(t2), 1);
j:=1;i:=1;n:=0;
while(i<=length(t1)) do begin
while(i<=length(t1)) and (t1[i] in limits) do
inc(i);
if i<=length(t1) then begin
back := i;
while(i<=length(t1)) and not(t1[i] in limits) do
inc(i);
inc(n);
bc1[n] := copy(t1, back, i-back);
end;
end;
j:=1;i:=1;n:=0;
while(i<=length(t2)) do begin
while(i<=length(t2)) and (t2[i] in limits) do
inc(i);
if i<=length(t2) then begin
back := i;
while(i<=length(t2)) and not(t2[i] in limits) do
inc(i);
inc(n);
bc2[n] := copy(t2, back, i-back);
end;
end;
for i:=1 to n do begin
bc1[i]:=b1; bc2[i]:=b2;
if b1<>b2 then begin
for c:=1 to length(b2) do
begin
if b1[c]<>b2[c] then lishnee[i]:=lishnee[i]+b2[c];
end;
writeln('В слове ',b2,' лишними символами являются ',lishnee[i]);
end; end; end.



P.S Сильно не ругайтесь, кодингом занимаюсь ~1.5 месяца, в данном случае оптимизация не особо интересует, нужно чтобы РАБОТАЛО.
Lapp
Вот тут вот:
 bc1[i]:=b1; bc2[i]:=b2;

нужно наоборот, то есть:
 b1:=bc1[i]; b2:=bc2[i];

Но над оптимизацией все-таки подумай. Используй процедуры, нельзя столько код дублировать..
generic prednisone without a scr
Cheap Price
neurontin side effects mimic hun
Cialis Ne Marche Pas Forum
cheap valtrex pills 3 day delive
prix cialis andorre
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.