Помощь - Поиск - Пользователи - Календарь
Полная версия: своя процедура <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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.