IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на сравнение двух строк посимвольно.
siriuz
сообщение 7.07.2009 12:11
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: mx

Репутация: -  0  +


Задача: Даны два текста 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 месяца, в данном случае оптимизация не особо интересует, нужно чтобы РАБОТАЛО.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.06.2025 16:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"