Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 16:05   #1
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
Стрелка Гляньте свежей головой ктонить! Плиз...

Вообщем программа должна в тексте как в массиве строк делать замену одного слова на другое...

Прога почти работает тока с недоделками вообщем если вводить так
Текст:
privet sobaka ya tvoi drug privet
privetuli sobaka ya tvi dryg privet
PriVet privetprivet
Zdarova
privetuli


Заменяемое слово: privet
Новое слово: new

результат:
new sobaka ya tvoi drug new
privetuli sobaka ya tvi dryg privet
new privetprivet
Zdarova
privetuli


Он не хочет заменять слова если в начале строки есть похожее тока с добавлением какихнить символов в конце..
2 строка: privetuli sobaka ya tvi dryg privetон не хочет менять слово privet в конце из за начального слова privetuli запарился уже помогите ктонить...

Вот текст программы:
Код:
program Text;
uses crt;
const
	SEPARATORS : set of Char = [' ',';',',','.','-',':','?','!','+','/','\',#9,#13,#10];
	n=5;
var
	t: array[1..n] of string;
	s,ns: string;
	d,i,k: integer;
	
function LowerCase(l: string): string; {функция преобразования текста к нижнему регистру}
var
  i: integer;
  result :string;
begin
  result := l;
  for i := 1 to length(result) do
    if (result[i] in ['A'..'Z']) then
      result[i] := chr(ord(result[i]) + 32);
	  LowerCase := result;
end;
begin
clrscr;
writeln('Vvedite text:');
for i:=1 to n do
	begin
		readln(t[i]);
	end;
writeln('Vvedite zamenaymoe slovo:'); {ввод заменяемого слова}
readln(s);
writeln('Vvedite novoe slovo:'); {ввод нового слова}
readln(ns);
ns:=lowercase(ns); {преобразование нового слова к нижнему регистру}
s:=lowercase(s); {преобразование заменяемого слова к нижнему регистру}
d:=length(s); {длинна заменяемого слова}
{тут начинается процесс поиска и замены слов}
for i:=1 to n do
begin
t[i]:=lowercase(t[i]); {преобразование начального текста к нижнему регистру}
end;
for i:=1 to n do
	begin
	k:= pos(s,t[i]);
			if k<>0 then
			begin
			if (k=1) and (t[i][k+d] in SEPARATORS) then begin {проверка начала строки}
			delete(t[i],k,d);
			insert(ns,t[i],k);
			i:=i-1;
			end
			else
			if (t[i][k-1] in SEPARATORS) and (t[i][k+d] in SEPARATORS) then begin {проверка середины строки}
			delete(t[i],k,d);
			insert(ns,t[i],k);
			i:=i-1;
			end
			else
			if (k=length(t[i])-d+1) and (t[i][length(t[i])-d] in SEPARATORS) then begin {проверка конца строки}
			delete(t[i],k,d);
			insert(ns,t[i],k);
			end
			else
			if (k=1) and (length(t[i])=d) then begin {проверка строки (типе если в строке тока это слово)}
			delete(t[i],k,d);
			insert(ns,t[i],k);
			end
			else
			writeln ('ku-ku');
			end;
		end;
writeln('Novy text:'); {вывод презультата}
for i:=1 to n do
writeln(t[i]);
readln;
end.
www.mybrest.net
Samopal вне форума Ответить с цитированием
Старый 21.04.2009, 16:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не вижу смысла lowercase делать функцией.
Вот так короче:
Код:
procedure LowerCase(var l: string);
var
  i: integer;
begin
  for i := 1 to length(l) do
    if (l[i] in ['A'..'Z']) then
      l[i] := chr(ord(l[i]) + 32);
end;
Соответственно, вызывать вот так:
Код:
lowercase(ns); {преобразование нового слова к нижнему регистру}
lowercase(s); {преобразование заменяемого слова к нижнему регистру}
d:=length(s); {длинна заменяемого слова}
Цикл тоже переписал:
Код:
for i:=1 to n do
 begin
 lowercase(t[i]); {преобразование начального текста к нижнему регистру}
 k := 1;
 repeat
 p := pos(s,copy(t[i],k,length(t[i])));  { p - целочисленная переменная }
 if p=0 then break;
 b1 :=((k+p-2>0) and (t[i][k+p-2] in SEPARATORS)) or (k+p-2=0);
 b2 := ((k+p-1+d<=length(t[i])) and (t[i][k+p-1+d] in SEPARATORS)) or (k+p-1+d>length(t[i]));
 if b1 and b2 then
  begin
  delete(t[i],k+p-1,d);
  insert(ns,t[i],k+p-1);
  k := k+p;
  end;
 inc(k);
 until p=0;
 end;
b1 и b2 - булевы переменные. Пришлось ввести, иначе условие в if'е слишком длинное.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 21.04.2009, 17:35   #3
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию

О великий и магучий! Хвала всевышенму за то что он даровал земле такого человека!

Псиба!
www.mybrest.net
Samopal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
help!!!плиз...))) Siluet Паскаль, Turbo Pascal, PascalABC.NET 3 10.04.2009 14:46
Плиз HELP ZOMBIE Фриланс 1 06.05.2008 17:29
плиз, help RealSHELS Общие вопросы Delphi 3 06.03.2008 20:02