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

Вниз

Пересечение символьных множеств.   Найти похожие ветки 

 
СатирЪ ©   (2004-07-31 18:21) [0]

Подскажите, пожалуйста, самый простой способ проверки вхождения русских букв в заданную строку.
То есть, как проверить, пересекается ли множество русских букв с множеством символов строки?

var s:string;

if (["а".."я"] and s )= 0 then ... - не работает
if s in ["а".."я"] then ... - тоже не работает

если проверять каждую букву строки в цикле, слишком громоздко.
То есть
for i:=0 to length(s) do
  if s[i] in ["а".."я"] then inc(k);
if k=0 then ... - строка не содержит русских букв.
есть слишком громоздко, потому что таких строк очень много и придётся долго ждать.


 
ПЛОВ ©   (2004-07-31 18:24) [1]

проверяй строку до первой русской буквы, нафига ж ее всю прогонять?


 
SergP ©   (2004-07-31 20:11) [2]


> СатирЪ ©   (31.07.04 18:21)
> Подскажите, пожалуйста, самый простой способ проверки вхождения
> русских букв в заданную строку.
> То есть, как проверить, пересекается ли множество русских
> букв с множеством символов строки?
>
> var s:string;
>
> if (["а".."я"] and s )= 0 then ... - не работает
> if s in ["а".."я"] then ... - тоже не работает
>
> если проверять каждую букву строки в цикле, слишком громоздко.
> То есть
> for i:=0 to length(s) do
>   if s[i] in ["а".."я"] then inc(k);
> if k=0 then ... - строка не содержит русских букв.
> есть слишком громоздко, потому что таких строк очень много
> и придётся долго ждать.


1. Насчет "слишком громоздко" - я бы так не сказал.
2. Если бы один из вариантов типа:

> if (["а".."я"] and s )= 0 then
> if s in ["а".."я"] then

или подобных работал в Дельфи то навряд-ли бы он мог работать намного быстрее чем при проверке каждой буквы в цикле...


 
Real ©   (2004-07-31 20:29) [3]

for i:=0 to length(s) do if ord(s[i])>x then result:=true

(где х - начало русских букв в аски, под рукой табл. нет)


 
DiamondShark ©   (2004-07-31 22:21) [4]

При чём тут for?

i:=1;
while (i<=Length(s)) and not (s[i] in ["а".."я"]) do inc(i);


 
Alx2 ©   (2004-07-31 22:31) [5]

Операция умножения (пересечения) имеет смысл, когда два операнда являются множествами. Для положительного решения вопроса "как проверить, пересекается ли множество русских букв с множеством символов строки?" достаточно в строке найти одну лишь рускую букву. Алмазная акула уже дал решение. Правда, будет быстрее, если выкинуть "not", а вместо "inc " поставить break, тогда факт вылета из цикла даст искомое.


 
Думкин ©   (2004-08-01 06:55) [6]

> [5] Alx2 ©   (31.07.04 22:31)

Тогда и цикл не while?


 
Real ©   (2004-08-01 08:56) [7]


> DiamondShark ©   (31.07.04 22:21) [4]
> При чём тут for?

Циклы ФОР выполняются быстрее


 
Sha ©   (2004-08-01 10:02) [8]

Real ©   (01.08.04 08:56) [7]

Не факт.


 
DiamondShark ©   (2004-08-01 12:07) [9]


> Real ©   (01.08.04 08:56) [7]
>
> > DiamondShark ©   (31.07.04 22:21) [4]
> > При чём тут for?
>
> Циклы ФОР выполняются быстрее

Доказывать будем, или на слово поверим?


 
Real ©   (2004-08-01 12:12) [10]

поверь на слово :-)


 
DiamondShark ©   (2004-08-01 12:21) [11]

Так и запишем: товарищь за базар не отвечает.


 
SergP ©   (2004-08-01 12:32) [12]


> [3] Real ©   (31.07.04 20:29)
> for i:=0 to length(s) do if ord(s[i])>x then result:=true
>
> (где х - начало русских букв в аски, под рукой табл. нет)


тогда уже лучше так:
for i:=0 to length(s) do if ord(s[i])>x then break;
result:=i<=length(s);


 
Real ©   (2004-08-01 13:21) [13]


> DiamondShark ©  

детский сад какой-то...


 
Real ©   (2004-08-01 13:23) [14]


> SergP ©

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


 
DiamondShark ©   (2004-08-01 13:24) [15]


> Real ©   (01.08.04 13:21) [13]

И совочком в меня кинь...


 
Real ©   (2004-08-01 13:28) [16]


> DiamondShark ©  

не, я детей не обижаю :)))


 
Думкин ©   (2004-08-01 13:38) [17]

> [12] SergP ©   (01.08.04 12:32)
> тогда уже лучше так:
> for i:=0 to length(s) do if ord(s[i])>x then break;
> result:=i<=length(s);

Оно так, только вот не совсем немного - с рядом замечаний и т.п.


 
DiamondShark ©   (2004-08-01 13:48) [18]


> Думкин ©   (01.08.04 13:38) [17]
> > [12] SergP ©   (01.08.04 12:32)
> > тогда уже лучше так:
> > for i:=0 to length(s) do if ord(s[i])>x then break;
> > result:=i<=length(s);
>
> Оно так, только вот не совсем немного - с рядом замечаний
> и т.п.


Не с рядом, а с одним: ЛДС.


 
Думкин ©   (2004-08-01 13:53) [19]

> [18] DiamondShark ©   (01.08.04 13:48)

Простот я несколько мягче тут, вот с вечным - как ты народ напугал. Уже 2 дня глупости не постят.
Конечно, со многими, но пусть сами скомпилдируют и подумают - инфы достаточно.
А что есть ЛДС?


 
DiamondShark ©   (2004-08-01 14:09) [20]


> А что есть ЛДС?

LMD по-русски.


> Конечно, со многими, но пусть сами скомпилдируют и подумают
> - инфы достаточно.

Не-а. Скажут, что глюк борланда.


 
Real ©   (2004-08-01 15:18) [21]


> DiamondShark ©   (01.08.04 14:09) [20]
>
> > А что есть ЛДС?
>
> LMD по-русски.

То есть ЛД - понятно, а последняя С ??? (к чему это было сказано, даже спрашивать не буду :-)


 
DiamondShark ©   (2004-08-01 15:28) [22]


> а последняя С ???

Сдохнуть.


> (к чему это было сказано, даже спрашивать не буду :-)

А там всё написано, к чему.


 
Alx2 ©   (2004-08-01 15:41) [23]

>Alx2 ©   (31.07.04 22:31)
а вот по пьяни по инету лазить некрасиво :(

Сорри, ребята спорол чушь. А вопрос в самом деле не стоит такого количества постов :)



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

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

Наверх




Память: 0.52 MB
Время: 0.043 c
3-1091351030
Guest
2004-08-01 13:03
2004.08.22
AdoQuery - Fields - DisplayFormat


4-1089359467
Thick
2004-07-09 11:51
2004.08.22
Отслеживание модулей


1-1091636072
webpauk
2004-08-04 20:14
2004.08.22
Определение связанности группы


1-1091753019
ASoft
2004-08-06 04:43
2004.08.22
Переменная по STEPу


1-1091948374
gs
2004-08-08 10:59
2004.08.22
FAST REPORT правка полей пользователем (дизайнер)