IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Поиск числа в строке
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Добрый вечер
Собственно, само задание: вводится строка, найти в этой строке первое число (может быть с запятой) (учитываются и знаки '+-') в общем из строки типа +-+--+-+-123,345ывыва6254в программа должна вывести -123,345
со знаками разобрался, не получается с запятыми. Чувствую, надо полностью переделывать условие
а, да. совсем забыл. Нельзя использовать стандартные процедуры преобразования типов

procedure TForm1.Button1Click(Sender: TObject);
var s,s2,s3: string;
m,m2,z: set of char;
i: integer;
begin
Label1.Caption:='';
s:=Edit1.Text;
m:=['0'..'9', '+', '-'];
z:=['+','-'];
m2:=['0'..'9', '.', ','];
s2:='';
for i:=1 to Length(s) do begin
if s[i] in m then begin
if (s[i+1] in m2) and not (s[i+1] in z) then
begin
s3:=s[i+1];
s2:=s2+s[i];
if not (s[i+2] in m2) then break;
end
else continue;
end;

end;
Label1.Caption:=s2+s3;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Для твоего случая достаточно:
   i := 1;
S2 := '';
q := H;
repeat
case q of
H:
begin
case S1[i] of
'.':
begin
q:=B;
S2:=S2+S1[i];
end;
'+', '-':
begin
q:=A;
S2:=S2+S1[i];
end;
'0'..'9':
begin
q:=C;
S2:=S2+S1[i];
end;
else q:=H;
end; // case
Inc(i); // Это делается всегда
end;

A, B:
case S1[i] of
'0'..'9':
begin
q:=Succ(Succ(q)); // Вместо case A => q := C и case B => q := D
S2:=S2+S1[i];
Inc(i);
end;
else
begin
q:=H;
S2:='';
end;
end;


C:
case S1[i] of
'.':
begin
q:=F;
S2:=S2+S1[i];
Inc(i);
end;
'0'..'9':
begin
q:=C;
S2:=S2+S1[i];
Inc(i);
end;
else q:=S;
end;

F, D: // Эти 2 ветки у тебя вообще идентичные
case S1[i] of
'0'..'9':
begin
q:=D;
S2:=S2+S1[i];
Inc(i);
end;
else q:=S;
end;

end;
until q = S;
я просто чуть-чуть упростил твой же код, объединил одинаковые (и почти одинаковые, как в случае q=A и q=B) ветки...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 18:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name