Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

Буквы и цифры   Найти похожие ветки 

 
F.E.V.   (2003-08-16 09:28) [0]

Здравствуйте!
Помогите написать процедуру отбора букв из строки,
например есть строка 587893Е234К или 8707535N986U, тесть строка может быть с любой буквой, а вот как мне из этих строк убрать буквенные символы а оставить только цифры?
Заранее спасибо!


 
default ©   (2003-08-16 09:37) [1]

этой сложная высокоинтеллектуальная задача
решаемая только теоретически


 
MBo ©   (2003-08-16 09:42) [2]

length, цикл for, Set, in


 
default ©   (2003-08-16 09:44) [3]

главно тут знать что у каждого символа есть код...


 
Юрий Зотов ©   (2003-08-16 09:47) [4]

procedure DigitsOnly(var S: string);
const
Digits = ["0".."9"];
var
i: integer;
begin
for i := Length(S) downto 1 do
if not (S[i] in Digits]) then Delete(S, i, 1)
end;


 
F.E.V.   (2003-08-16 09:48) [5]

Спасибо Юрий Зотов!
то что нужно!


 
TGrigory ©   (2003-08-16 09:49) [6]

Такое я когда-то решал: (не сложно изменить и в процедуру)
const
num = ["0".."9"];
var str: string;
res: string;
i: integer;
begin
writeln("Введите строку");
readln(str);
res := "";
for i := 1 to length(str) do
if str[i] in num then res := res + str[i];
writeln(res);
end.


 
default ©   (2003-08-16 09:51) [7]

function DigitsOnly(const S: string): String;
var
i: integer;
begin
Result := "";
for i := Length(S) downto 1 do
if S[i] in ["0".."9"] then Result := Result + S[i]
end;

а то после каждого Delete будет копироваться часть строки правее найденной "цифры"
наверно так чуть лучше


 
default ©   (2003-08-16 09:52) [8]

function DigitsOnly(const S: string): String;
var
i: LongWord;
begin
Result := "";
for i := 1 to Length(S) do
if S[i] in ["0".."9"] then Result := Result + S[i]
end;

так то есть


 
Юрий Зотов ©   (2003-08-16 10:03) [9]

> default © (16.08.03 09:51) [7]

Что быстрее - передвигать хвост строки "по месту" или накапливать Result, постоянно перераспределяя память?


 
default ©   (2003-08-16 10:08) [10]

Юрий Зотов © (16.08.03 10:03) [9]
согласен
можно заранее выделить память
потом урезать лишнее
это конечно если скорость очень критична...


 
Юрий Зотов ©   (2003-08-16 10:25) [11]

> default © (16.08.03 10:08) [10]
> можно заранее выделить память
> потом урезать лишнее

Я не смотрел код Delete, поэтому наверняка утверждать не могу, но похоже, что мой вариант именно это и делает.


 
F.E.V.   (2003-08-16 11:50) [12]

function DigitsOnly(const S: string): String;
var
i: LongWord;
begin
Result := ""; - это типа string? (выдается сообщение об ошибке)
for i := 1 to Length(S) do
if S[i] in ["0".."9"] then Result := Result + S[i]
end;

и как мне вывести полученный результат в Label


 
Омлет ©   (2003-08-16 13:43) [13]

Ты дурак или прикидывашься?



Страницы: 1 вся ветка

Текущий архив: 2003.09.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
8-1511
Литвиненко Вадим
2003-04-28 15:28
2003.09.01
Image+Label = сохранение картинки


14-1620
Фикус
2003-08-14 14:14
2003.09.01
вопрос по C#


14-1632
Zergling
2003-08-13 11:38
2003.09.01
А где орешник?


14-1606
moniker
2003-08-13 19:15
2003.09.01
Добрый вечер :)


3-1287
Skywalker
2003-08-11 10:43
2003.09.01
Специальные знаки