Показать сообщение отдельно
  #8  
Старый 23.11.2014, 14:38
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Тут уже должен быть ответ "Используй RegExp".
А без них - что-то вроде этого:
Код:
n := 500;
i := 1;
s1 := '';
sresult := '';
while i <= length(s) do
begin
  if s[i] in ['0'..'9'] then
    s1 := s1 + s[i]
  else
  begin
   if s1 <> '' then
   begin
     // тут s1 содержит очередное число
     num := StrToInt(s1);
     if num < n then
        sresult := sresult + IntToStr(num - 1)
     else
        sresult := sresult + s1;
     s1 := '';
   end;
   sresult := sresult + s[i];
  end;
  inc(i);
end;
// крайний случай (число в конце текста)
if s1 <> '' then
begin
  num := StrToInt(s1);
  if num < n then
     sresult := sresult + IntToStr(num - 1)
  else
     sresult := sresult + s1;
end;
writeln(sresult);
readln;
Для заданного примера '[52, c.34-78; 137, c.56-98]' выход [51, c.33-77; 137, c.55-97] при N = 100.

Можно модифицировать, чтобы не по одному символу в строку прибавлять, а блоками.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием