Форум: "Потрепаться";
Текущий архив: 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.036 c