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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2011, 14:56   #1
decantnik
Пользователь
 
Аватар для decantnik
 
Регистрация: 15.10.2008
Сообщений: 36
По умолчанию Работа со строками Pascal

Дана строка вида "dfs{5}feg". Получить "dfssssssfeg". Т.е. в скобках указано сколько повторяющийся символов идет.

Я делал так, находил позицию { потом с нее в строку добавлял числа до символа } потом конвертировал в целое с помощью val. Но проблема в том, что если число было двухзначное то в строку добавлялся только последний символ.. Вот.

Может подкинет кто идею решения?
decantnik вне форума Ответить с цитированием
Старый 07.03.2011, 15:49   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Код:
uses crt;
var a:string;
   y,r,i,p,j:integer;
   g,f:boolean;
   m : set of char;
   c: string;
begin
m := ['0'..'9'];
read(a);
i:=1;
g:=false;
while ( (not g) and (i<=length(a)) )do
begin
     if a[i] = '{' then
     begin
          inc(i);
          f:=false;
          p:=i;
          while ((a[i] in m) and (i<=length(a)))  do
          begin
               inc(i);
               f:=true;
          end;
     if (f) and (a[i] = '}') then g:=true;
     end else
         inc(i);
end;
c := '';
for j:=p to i do
    c:=c+a[j];
val(c,y,r);
delete(a,p-1,(i-p)+2);
write(copy(a,1,p-2));
delete(a,1,p-2);
for j:=1 to y do write(a[p-2]);
write(a);
 end.
в конце заместо
Код:
write(copy(a,1,p-2));
delete(a,1,p-2);
for j:=1 to y do write(a[p-2]);
write(a);
заместо этой красоты поставь insert()...
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 07.03.2011, 16:34   #3
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Предлагаю свое решение задачи.
Код:
Var
  St,BufSt:String;
  i,j,k,p:Byte;
  BufChislo:Byte;
  Error:Integer;
  BufSimvol:Char;
begin
  Readln(St);
  For i:=1 to Length(St) do
  Begin
    j:=Pos('{',St);
    k:=Pos('}',St);
    If K > 0 then
    Begin
      If (j <> 0) and (j <> 1) then BufSimvol:=St[j-1];
      BufSt:='';
      For p:=j+1 to k-1 do
      Begin
        BufSt:=BufSt+St[p];
      End;
      Delete(St,Pos(BufSt,St),Length(BufSt));
      Delete(St,Pos('{',St),1);
      Delete(St,Pos('}',St),1);
      Val(BufSt,BufChislo,Error);
      For p:=1 to BufChislo do Insert(BufSimvol,St,j)
    End;
  End;
  Writeln(St);
  Readln
End.
Decantnik, выбирай любое и разбирайся
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 12.03.2011, 22:46   #4
decantnik
Пользователь
 
Аватар для decantnik
 
Регистрация: 15.10.2008
Сообщений: 36
По умолчанию

спасибо всем
decantnik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Работа со строками. lisenog Помощь студентам 1 16.12.2010 15:56
Работа со строками (Pascal) SmileGirl Помощь студентам 4 22.10.2010 01:17
Работа со строками (pascal) Marlin Помощь студентам 7 03.06.2010 14:11
Работа со строками (pascal) ДиM@ Помощь студентам 3 18.04.2010 09:39
Работа со строками (Pascal) RoMaNyIL Помощь студентам 2 21.05.2009 20:39