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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2015, 04:35   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Проверка на структуру строки

Всем привет.

Есть дикое количество строк ( они же команды ), и для каждой нужно прикрепить некоторую задачу.

Но вот большая часть этих строк подходит под формат ( СловоЧисло ).

Вот собственно вопрос, как определить подходит строка под этот формат или нет ?
-Jack- вне форума Ответить с цитированием
Старый 26.01.2015, 06:00   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

функция Pos не подходит? или Format('%s%d', aString) = СловоЧисло
ZuBy вне форума Ответить с цитированием
Старый 26.01.2015, 07:03   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Поиск по POS в множестве цифр самое простое что приходит в голову.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.01.2015, 07:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Регулярками проверять. Иначе зачем они прикручены в Делфи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.01.2015, 08:10   #5
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

-Jack- Напиши функцию определения формата, которая будет в цикле от первого до последнего символа слова искать цифру. Как только цифра найдена, копировать слово от этого символа до конца слова. Потом загоняй полученные цифры в функцию TryStrToInt. Ответ этой функции у будет ответом твоей функции.
WinCoder вне форума Ответить с цитированием
Старый 26.01.2015, 13:08   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
r:=0; //пока нет ничего
for j:=1 to length(s) do begin
  case r of
  0: begin //вначале может быть только буква
       if s[j] in ['a'..'z'] then begin r:=1; continue; end
       else begin r:=3; break; end;
     end;
  1: begin //буквы уже были теперь может быить и буква и цифра
       if s[j] in ['a'..'z'] then continue
       else if s[j] in ['0'..'9'] then begin r:=2; continue; end
       else begin r:=3; break; end;
     end;
  2: begin // а теперь уже есть цифра далее только цифры
       if s[j] in ['0'..'9'] then continue
       else begin r:=3; break; end;
     end;
  else begin // а это черт знает что
         break; 
       end;
  end; 
end;

r=0; // нет символов
r=1; // только буквы
r=2; // ибуквы и цифры
r=3; // черт знает что
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.01.2015, 13:13   #7
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Код:
if s[j] in ['a'..'z']
evg_m а если "Ю"? Или "/"? Нужно делать проверку на цифры, а не на всё остальное, ибо всего остального намного больше.
WinCoder вне форума Ответить с цитированием
Старый 26.01.2015, 13:29   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
evg_m а если "Ю"?
так это не код, а пример кода который надо осмыслить и доработать.
Цитата:
Или "/"?
с каких это пор данный символ отнесли к буквам
Цитата:
формат ( СловоЧисло )
Цитата:
ибо всего остального намного больше.
в этом вы правы (256-26*2-32*2[-10]) именно поэтому и нужна проверка букв.
Код:
if s[j] in ['a'..'z','A'..'Z','А'..'Я','а'..'я']then
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.01.2015, 13:37   #9
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
с каких это пор данный символ отнесли к буквам
С тех самых, с которых компьютерное слово включило в себя любые символы. Для правильной реализации в Вашем варианте нужно смотреть алфавит команды, а не угадывать его.
Цитата:
в этом вы правы (256-26*2-32*2[-10]) именно поэтому и нужна проверка букв.
Чушь.
Код:
if not (s[j] in ['0'..'9']) then
Хватает с головой, и охватывает массив в 10 раз меньше.

Последний раз редактировалось WinCoder; 26.01.2015 в 13:42.
WinCoder вне форума Ответить с цитированием
Старый 26.01.2015, 13:57   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Хватает с головой, и охватывает массив в 10 раз меньше.
Ну да, в обоих случаях 32 байта для множества. И никаких массивов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка строки galaxyblazer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 18.03.2012 18:25
проверка строки tinton Помощь студентам 6 09.11.2011 15:39
Проверка строки dosha Общие вопросы C/C++ 1 27.12.2010 23:46
проверка строки Артэс Общие вопросы C/C++ 13 21.01.2010 00:28
Проверка строки SL1CK Общие вопросы C/C++ 4 08.06.2009 18:41