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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название темы должно адекватно отражать суть решаемой задачи/проблемы.
Старый 17.10.2013, 19:58   #1
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию Строки: дано натур число n.символы S1...Sn. Изменить S1...Sn, удалив из нее все знаки "+", за которыми следует цифра (Delphi)

помогите пжл докончить, никак не могу, не получается ПОЖАЛУЙСТАА(( на делфи,
препод проверил лабораторную работу мою, поржал, но принял отчет и ушел, я не понимаю, что он имел ввиду..пожалуйста помогите,
К ПРИМЕРУ:
УСЛОВИЕ: дано натур число n.символы S1...Sn. Изменить последовательность S1...Sn, удалив из нее все знаки "+", за которыми следует цифра
он написал в "СТРОКА" типа этого:
СТРОКА
;*+5jj+6*+9nn i-9p,y++10 (вместе с другими символами, запятыми, пробелами, буквами и т д)
и в
"Строка без '+' "
;*5jj6*9nn i-9p,y+10
ну вот так примерно, но + все равно есть,хотя в условии дано: удалить + за которыми следует цифра, ОБЪЯСНИТЕ ПЖЛ добрые программисты, что препод имел ввиду
и как исправить в коде

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    edt2: TEdit;
    btn2: TButton;
    btn3: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);

  private
{ Private declarations }
  public
{ Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Btn1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
  s := edt1.Text;
  for i := 1 to length(s) do
    if (s[i] = '+') and (s[i + 1] in ['0'..'9']) then
      delete(s, i, 1);
  edt2.Text := s;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  edt1.Clear;
  edt2.Clear;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  close;
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.
Вложения
Тип файла: rar делфи.rar (212.0 Кб, 8 просмотров)

Последний раз редактировалось Serge_Bliznykov; 18.10.2013 в 09:28.
Zaraaa вне форума Ответить с цитированием
Старый 17.10.2013, 20:49   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Привожу примеры:
++1 станет +1
+k станет +k
Т.е. сохранение плюсов вполне возможно.
Красный плюс удовлетворяет условию, а синий - нет.
Насчет кода, например:
Код:
i := length(s);
while i > 1 do
begin
  if (s[i] in ['0'..'9']) and (s[i - 1] = '+') then
  begin
    dec(i);
    delete(s[i]);
  end;
  dec(i);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 17.10.2013 в 20:53.
BDA вне форума Ответить с цитированием
Старый 17.10.2013, 21:06   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

1. Ввели программный код, выделили, нажали символ #, который в меню окна редактирования.
2. Последний плюс остался, так как там два плюса подряд. Удаляется только второй плюс, который перед цифрой.
3. Цикл
Код:
...
for i:=1 to length(s) do
if (s[i]='+') and (s[i+1] in ['0'..'9']) then
delete(s,i,1); 
...
не рабочий, так как при i = length(s) элемент s[i+1] не определен (выход за границу).
И зачем копировать строку в строку, удалять символы, а затем вновь копировать в строку?
Может сразу:
Код:
...
Edit2.Text := '';
for i:=1 to length(Edit1.Text) - 1 do
   if (Edit1.Text[i] <> '+') then
      Edit2.Text := Edit2.Text + Edit1.Text[i]
   else
      if (Edit1.Text[i+1] in ['0'..'9']) then
         continue;

Edit2.Text := Edit2.Text + Edit1.Text[length(Edit1.Text)]
...
PS: Не проверял, ...

Как-то так, ...
Как-то так, ...
ViktorR на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распечатать введенную строку, удалив из нее символы, не являющиеся буквами и цифрами, и ЗАМЕНИВ КАЖДУЮ ЦИФРУ НА "**" Asel01 Помощь студентам 0 03.03.2013 15:00
Преобразовать эту строку, удалив из нее те символы, которые соседствуют с символом "_". Proskurina Паскаль, Turbo Pascal, PascalABC.NET 4 28.05.2012 10:55
Дан файл из символов. Переписать в новый файл все символы, за которыми в исходном файле следует данная буква Kolimba Паскаль, Turbo Pascal, PascalABC.NET 1 25.09.2011 17:57