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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 10:49   #1
Nezaam
Пользователь
 
Аватар для Nezaam
 
Регистрация: 10.05.2010
Сообщений: 14
По умолчанию Замена длины слова его позицией

ТЗ:
Текст задан способом: первый символ - цифра, указывающая длину первого слова, за первым словом через пробел - вновь цифра, указывающая длину второго слова и т.д.
Вместо цифр указывающих длину слова, вставить числа, указывающие коорлинату начала следующего слова.

Т.е. имеем "4мама 4папа" надо получить "2мама 7папа". Наработка у меня есть:
Код:
procedure TfMain.Button1Click(Sender: TObject);
var
  str  : String;
  i, n : Integer;
begin
  str := Edit1.Text;
  n := length(str);
  i := 1;
  while i<n do begin
    case str[i] of
      '0'..'9' : begin
                  delete(str,i,1);
                  insert(IntToStr(i+1),str,i);
                 end;
    end; //case
  inc(i);
  if i>9 then i := i+1;
  end; // while
Label1.Caption := str;
end;
На вышеописанном примере код работает, но как сделать чтобы код работал если длина слова больше 9 символов?
"4хлеб 14синхрофазатрон" -> "2хлеб 7синхрофазатрон".
Я только учусь...
Nezaam вне форума Ответить с цитированием
Старый 08.01.2011, 11:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

получите и распишетесь...
Код:
var
  st  : String;
  i, LenNumber, LenPos : Integer;
begin
  st := Edit1.Text;
  i := 1;
  while i<length(st) do begin
    if st[i] in ['0'..'9'] then begin
      LenNumber := 0;
      while ((i+LenNumber)<=length(st))
         and (st[i+LenNumber] in ['0'..'9']) do inc(LenNumber);
      delete(st,i,LenNumber);
      LenPos := Length(IntToStr(i+1));
      insert(IntToStr(i+LenPos),st,i);
      inc(i, LenPos);
    end;
  inc(i);
  end; // while
  Label1.Caption := st;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2011, 11:29   #3
Nezaam
Пользователь
 
Аватар для Nezaam
 
Регистрация: 10.05.2010
Сообщений: 14
По умолчанию

Serge_Bliznykov, спасибо большое.
Я только учусь...
Nezaam вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить все слова с длиной, большей заданной длины Broken Angel Помощь студентам 3 07.01.2011 15:17
Запрос на поиск слова в значении атрибута таблицы и его замена chandrasecar SQL, базы данных 0 29.06.2010 23:31
(Си) Замена слов наименьшей длины в массиве строк RZMTZM Общие вопросы C/C++ 7 25.01.2010 00:30
[C++]замена каждого эл-та на ср. арифметическое его и его соседей. AntonNeChehov Общие вопросы C/C++ 13 01.01.2010 20:04
Динамические массивы, определение/задание его длины Paul Hindenburg Общие вопросы C/C++ 1 31.05.2009 12:21