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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
14-1091816077
Денисыч
2004-08-06 22:14
2004.08.22
Вопрос про легальность Delphi


14-1091719602
Cerberus
2004-08-05 19:26
2004.08.22
Хочяу в орешник


4-1089638165
BillyJeans
2004-07-12 17:16
2004.08.22
Функция преобразования имени файла...


1-1092141599
Кодер
2004-08-10 16:39
2004.08.22
Обращение к ресурсу


14-1090352717
saNat
2004-07-20 23:45
2004.08.22
Выбор DVD+/-CDRW





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский