Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Внизчайник про множества Найти похожие ветки
← →
denis24 (2005-01-14 10:56) [0]Даже стыдно спрашивать.....
Как проверить входит ли строковая перемен в множество
например
str:="aa"
if str not in ["bb","cc","dd"] then......
← →
Fay © (2005-01-14 10:57) [1]Так низя - это подойдёт только для ординальных типов.
← →
denis24 (2005-01-14 10:59) [2]тока if?
← →
denis24 (2005-01-14 11:00) [3]тока if?
← →
Fay © (2005-01-14 11:01) [4]В общем случае - да, только if.
← →
Гы (2005-01-14 11:05) [5]Гы-гы ... попробуй for...
← →
ЮЮ © (2005-01-14 11:10) [6]
function IsOneOf(const s: string; list: array of string): boolean;
var
i: integer;
begin
for i := low(list) to high(list) do
if AnsiCompareText(s, list[i]) = 0 then begin
result := true;
exit;
end;
result := false;
end;
Использовать:if IsOneOf(str, ["bb","cc","dd"]) then
← →
begin...end © (2005-01-14 11:15) [7]> [6] ЮЮ © (14.01.05 11:10)
Модуль StrUtils, функция AnsiIndexStr.
← →
Anatoly Podgoretsky © (2005-01-14 13:26) [8]str:="aa"
if Pos(str, "bbccdd") > 0 then......
← →
Fay © (2005-01-14 13:27) [9]str := "bc"
← →
Юрий Зотов © (2005-01-14 13:46) [10]if SringList1.IndexOf("aa") >= 0 then ...
При Sorted=True сработает существенно быстрее, чем прямой перебор по массиву.
← →
begin...end © (2005-01-14 13:50) [11]> [10] Юрий Зотов © (14.01.05 13:46)
> сработает существенно быстрее, чем прямой перебор по массиву
Да, но StringList вначале надо создать и заполнить.
← →
Юрий Зотов © (2005-01-14 13:54) [12]begin...end © (14.01.05 13:50) [11]
Э-э-э... а массив не надо?
← →
begin...end © (2005-01-14 14:01) [13]> [12] Юрий Зотов © (14.01.05 13:54)
Я просто понял задачу автора ветки так: нужно проверить, встречается ли заранее НЕизвестная строка в заранее известном множестве (см. его пост [0]). Массив можно "создать" при передаче его в AnsiIndexStr, например:var
Str: String;
begin
if AnsiIndexStr(Str, ["aa", "bb", "cc"]) then
...
end.
А в случае с TStringList придётся делать так:var
Str: String;
begin
with TStringList.Create do
try
Sorted := True;
Add("aa");
Add("bb");
Add("cc");
if IndexOf(Str) >= 0 then
...
finally
Free
end
end.
← →
begin...end © (2005-01-14 14:03) [14]
> if AnsiIndexStr(Str, ["aa", "bb", "cc"]) then
if AnsiIndexStr(Str, ["aa", "bb", "cc"]) >= 0 then
← →
Юрий Зотов © (2005-01-14 14:08) [15]> begin...end © (14.01.05 14:01) [13]
> Я просто понял задачу автора ветки так: нужно проверить,
> встречается ли заранее НЕизвестная строка в заранее известном
> множестве (см. его пост [0]). Массив можно "создать" при
> передаче его в AnsiIndexStr
Я тоже понял именно так. А если множество строк заранее известно, то зачем же создавать его каждый раз заново, если можно (и нужно) сделать это один раз?
А потом просто вызывать IndexOf.
← →
begin...end © (2005-01-14 14:11) [16]> [15] Юрий Зотов © (14.01.05 14:08)
> А если множество строк заранее известно, то зачем же создавать
> его каждый раз заново, если можно (и нужно) сделать это
> один раз?
Если проверка будет встречаться не один раз, то я, возможно, соглашусь. Если же, наоборот, проверка на "вхождение" - только в одном месте кода, то я не согласен.
← →
Юрий Зотов © (2005-01-15 11:50) [17]> begin...end © (14.01.05 14:11) [16]
Естественно. Все зависит от задачи.
← →
Anatoly Podgoretsky © (2005-01-15 14:45) [18]Fay © (14.01.05 13:27) [9]
Вопрос был про aa, пусть для начала уточнит свой вопрос.
← →
SergP © (2005-01-15 15:19) [19]
> [8] Anatoly Podgoretsky © (14.01.05 13:26)
> str:="aa"
> if Pos(str, "bbccdd") > 0 then......
>
>
> [9] Fay © (14.01.05 13:27)
> str := "bc"
Тогда:
str:="aa";
if (Pos(str, "bbccdd") mod 2) =1 then......
← →
avik © (2005-01-15 16:18) [20]проще всего использовать массив и проверочку
if или case по честному!!!
удачи !!!
← →
Anatoly Podgoretsky © (2005-01-15 16:39) [21]SergP © (15.01.05 15:19) [19]
Тут две ошибки, сработает и для невхождения, кроме того сработает не так, надо две проверки POS>0 и вторая mod 2) = 0
← →
Anatoly Podgoretsky © (2005-01-15 16:41) [22]А лучше использовать вместо mod функцию even/odd
← →
Anatoly Podgoretsky © (2005-01-15 16:42) [23]Ошибся одна ошибка = 1 правильно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c