Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа со строками (Pascal)

930
12 июня 2007 года
Sash1k
115 / / 27.04.2007
Задачв: Дана строка. Преобразовать ее, удалив каждый нечетный символ * и повторив каждый символ, предшествующий *.

у меня получилось:
Код:
var
 s: string;
 k, i: integer;
 f, h: text;

begin
 assign(f,'input.txt');
 reset(f);
 read(f,s);
 k:=0;
 i:=0;
 while i<>Length(s) do
 begin
  if s='*' then
  begin
   inc(k);
   if k mod 2<>0 then
   begin
    delete(s,i,1);
    dec(i);
   end;
  end;
 inc(i);
 end;
 assign(h,'out.txt');
 rewrite(h);
 write(h,s);
 close(h);
 close(f);
end.


у меня только удаляется нечетный символ *.
Подскажите, как повторить каждый символ, предшествующий *??
Заранее спасибо!
4.0K
12 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
 
Код:
if k mod 2<>0 then
   begin
  [COLOR="Blue"]  s := s[i-1];[/COLOR]
   end;
  end;


естественно i>=1;
(i символ - это веди и есть *?)
930
12 июня 2007 года
Sash1k
115 / / 27.04.2007
что бы вставить символ использовать insert?
4.0K
12 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
а так просто нельзя?
вместо delete - insert
930
13 июня 2007 года
Sash1k
115 / / 27.04.2007
Цитата: ApokALEXIS
а так просто нельзя?
вместо delete - insert



вот как должен выглядеть теперь цикл:

Код:
i:=1;  //начинаем с 1
 while i<=Length(s) do   //i может равняться последнему символу
 begin
  if s='*' then
  begin
   inc(k);
   if k mod 2<>0 then
   begin
    st:=copy(s,i-1,1);   //копировали
    delete(s,i,1);   //удалили
    insert(st,s,i);  //вставили, теперь значение i тут монижать не надо
   end;
  end;
 inc(i);   //изменяем i только здесь
 end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог