Помощь - Поиск - Пользователи - Календарь
Полная версия: своя процедура <insert>
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TS*
Процедура должна быть аналогичная стандартной процедуре <insert>, я где то допустил ошибку(неправильно
выводит результат), посмотрите может заметите wacko: :

procedure my_insert(source:string;s:string;index:integer);
var
s_t:string;
i,j,count:byte;
begin
for i:=1 to length(source) do
s:=s+' ';
count:=0;
for i:=1 to length(source) do
begin
for i:=(length(s)+count) downto (index+count) do
begin
s[i+1]:=s[i];
s[i]:=' ';
end;
inc(count);
end;

for j:=1 to length(source) do
for i:=index to (index+length(source)) do
s[i]:=source[j];
s1:=s;
end;

klem4
А так нельзя ?

uses crt;

procedure my_insert(var source : string; subS : string; start : byte);
var
T1,T2 : string;
begin
T1 := copy(source,1,start-1);
T2 := copy(source,start,255);
source := ConCat(T1, subS, T2);
end;

var
s,sb : string;
begin
clrscr;
s := '12345';
sb := '00';
my_insert(s, sb, 3);
writeln(s);
readln;
end.


Или вот так smile.gif

procedure my_insert(var source : string; subS : string; start : byte);
begin
source := Copy(source, 1, start-1) + subS + copy(source, start, 255);
end;

volvo
TS*, а ты где результат-то возвращаешь? blink.gif Или Var-параметр, или это - Function...
TS*
возврат var; klem4 просто забыл добавить что написать желательно без использования <copy>, <insert>,<delete>, и т.д. wacko.gif
klem4
 uses crt;

procedure my_insert(var source : string; subS : string; start : byte);
var
T : string;
i : byte;
begin

T := '';

for i := 1 to start - 1 do T := T + source[i];

for i := 1 to length(subS) do T := T + subs[i];

for i := start to length(source) do
T := T + source[i];

source := T;

end;

var
s,sb : string;
begin
clrscr;
s := '12345';
sb := '00';
my_insert(s, sb, 1);
writeln(s);
readln;
end.
volvo
Цитата
   for i := start  to length(source) do
T := T + source[i];
Не все так просто... T может переполниться (длина > 255 символов...), и будет ошибка...
GoodWind
Код

if (length(source)+length(subS)) <=255 then
begin
   T := '';
   for i := 1 to start - 1 do T := T + source[i];
   for i := 1 to length(subS) do T := T + subs[i];
   for i := start  to length(source) do
   T := T + source[i];
   source := T;
end else source:='Error!';
lol.gif
volvo
+ к этому: если в стандартную Insert передать
   s := '12345';
sb := '00';
insert(s, sb, 40);
, то '00' просто будет добавляться в конец строки... А у тебя?
GoodWind
можно еще вытеснить "лишние" символы:
Код

   T := '';
   if start>length(source) then start:=length(source);
   for i := 1 to start - 1 do T := T + source[i];
   i:=1;
   while (i<= length(subS) ) and (i<=255) do
   begin  
    T := T + subs[i];
    inc(i);
   end;
   i:= start;
   while (i<= length(source)) and(i<=255) do
   begin
    T := T + source[i];
    inc(i);
   end;
   source := T;


! компилятора под рукой нет, код не проверялся !

исправлено.
TS*
Спасибо вам за помощь, а то бы сам долго "парилса". good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.