Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
14-1594
Феликса
2003-08-13 21:38
2003.09.01
Как сделать redirect?


3-1285
Rel_
2003-08-11 16:02
2003.09.01
Невероятный запрос


14-1571
iNew
2003-08-14 04:15
2003.09.01
Забыл ссылку на базу готовых решений кинте плиз.


1-1479
Rel_
2003-08-18 09:10
2003.09.01
копирование оъектов


3-1288
Zorik
2003-08-11 10:31
2003.09.01
как удалить prymary key в Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский