Форум: "Потрепаться";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизСравнения строк Найти похожие ветки
← →
4eshka) (2005-01-13 14:35) [0]У кого какие идеи, нужно сравнить две строки не используя опреторы сравнения? Какии способы есть для этого? У кого какие идеи? У меня есть несколько реализаций. Нужно как можно запутанее :)
← →
Kerk © (2005-01-13 14:35) [1]4eshka) (13.01.05 14:35)
без операторов сравнения ничего сравнивать невозможно
← →
Vovchik_A © (2005-01-13 14:36) [2]Сравнивать будем посимвольно или просто длину ? :)
← →
Ega23 © (2005-01-13 14:41) [3]У кого какие идеи?
У меня есть идея. Реализации - в студию!
← →
4eshka) (2005-01-13 14:43) [4]Сравниваем s1 и s2
s1:="qqq";
s2:=edit1.text;
a:=0;
b:=0;
for i:=1 to length(s1) do
begin
a:=a+ord(s1[i]);
end;
for i:=1 to length(s2) do
begin
b:=b+ord(s2[i]);
end;
try
a:=123 div (a-b);
ShowMessage("fu");
except ShowMessage("good") end;
← →
Kerk © (2005-01-13 14:44) [5]4eshka) (13.01.05 14:43) [4]
а.. ты извраты имел ввиду.. так бы и сказал.. ща подумаю.. :)))))))))
← →
4eshka) (2005-01-13 14:47) [6]
> 4eshka) (13.01.05 14:43) [4]
> а.. ты извраты имел ввиду.. так бы и сказал.. ща подумаю..
> :)))))))))
:)
← →
pasha_golub © (2005-01-13 14:49) [7]Может, я тупой, но ни черта не понял
← →
Kerk © (2005-01-13 14:52) [8]
a := 0;
for i := 1 to Min(Length(s1),Length(s2)) do
a := a + (Ord(s1[i]) - Ord(s2[i]));
a := a + (Length(s1)-(Length(s2));
if Boolean(a) then ShowMessage("!!!");
← →
Kerk © (2005-01-13 14:54) [9]4eshka) (13.01.05 14:43) [4]
Этот код - полный бред и работать не будет
← →
4eshka) (2005-01-13 14:57) [10]Почему не будет работать? Проверь! У меня работает :D
← →
4eshka) (2005-01-13 14:59) [11]
> s1:="qqq";
> s2:=edit1.text;
> a:=0;
> b:=0;
> for i:=1 to length(s1) do
> begin
> a:=a+ord(s1[i]);
> end;
> for i:=1 to length(s2) do
> begin
> b:=b+ord(s2[i]);
> end;
>
> try
> a:=123 div (a-b); //на 0 делить нельзя, если (a-b)<>0 то и s1<>s2, если равны, то получается деление на 0
> ShowMessage("fu");
> except ShowMessage("good") end;
← →
Kerk © (2005-01-13 15:04) [12]4eshka) (13.01.05 14:57) [10]
сравни строки
Roman Jankovski
Jankovski Roman
← →
}|{yk © (2005-01-13 15:05) [13]А xor и деление любого числа на получившееся быстрее будет...
← →
4eshka) (2005-01-13 15:07) [14]
> 4eshka) (13.01.05 14:57) [10]
> сравни строки
>
> Roman Jankovski
> Jankovski Roman
мда, понятно теперь :) но идея понятна то
← →
Kerk © (2005-01-13 15:09) [15]4eshka) (13.01.05 15:07) [14]
yes
← →
Ega23 © (2005-01-13 15:22) [16]
ss:="Declare @X int Set NoCount On "+
"exec @X=sp_Compare2Strings @Param1="+String1+", @Param2="+String2+
" Set NoCount OFF Select X=@X";
With Querty do
begin
Sql.Add(ss);
Open;
if FieldBuName("X").AsBoolean then
ShowMessage("=")
else
ShowMessage("<>");
.....
:о)
← →
wl (2005-01-13 15:24) [17]> Kerk © (13.01.05 14:52) [8]
этот код тоже не работает
например,
s1 := "123";
s2 := "3";
← →
4eshka) (2005-01-13 15:36) [18]
s1:="wwww";
s2:=edit2.text;
assignfile(f,s1);
rewrite(f);
writeln(f,s1);
closefile(f);
assignfile(f,s2);
{$I-}
reset(f);
{$I+}
case IOResult of
0: ShowMessage("=");
end;
← →
Kerk © (2005-01-13 15:43) [19]wl (13.01.05 15:24) [17]
тамxor
нужен
← →
Kerk © (2005-01-13 15:49) [20]хотя пофиг.. совсем сегодня думалка неработает..
← →
Kerk © (2005-01-13 15:51) [21]хотя пофиг.. совсем сегодня думалка неработает..
← →
Zeqfreed © (2005-01-13 15:52) [22]Вроде работает...
function IsEqual(s1, s2 : String) : boolean;
var
r, o1, o2 : Byte;
i : Word;
begin
r := 0;
Result := true;
SetLength(s1, Max(length(s1), length(s2)));
SetLength(s2, Max(length(s1), length(s2)));
for i := 1 to Min(length(s1), length(s2)) do begin
o1 := Ord(s1[i]);
o2 := Ord(s2[i]);
r := o1 xor o2;
Result := not (Result and Boolean(r));
end;
end;
← →
Zeqfreed © (2005-01-13 15:54) [23]надеюсь Max без операций сравнивания можно писать?
← →
Sandman25 © (2005-01-13 15:55) [24]
procedure Test(const s1, s2: string);
const
Arr: array[-1..0] of string = ("<>", "=");
begin
with TStringList.Create do
try
Add(s1);
ShowMessage(Arr[IndexOf(s2)])
finally
Free
end
end;
Кто найдет условный оператор или операторы сравнения, пусть бросит в меня камень :)
← →
Reindeer Moss Eater © (2005-01-13 16:00) [25]... Нужно как можно запутанее :)
Видимо человек пишет крутую защиту крутой программы.
Забыв при этом, что после крутой и запутанной проверки строк (никому не нужной кстати) последует один простой и некрутой и незапутанный условный переход.
← →
DiamondShark © (2005-01-13 16:00) [26]
> Кто найдет условный оператор или операторы сравнения, пусть
> бросит в меня камень :)
А внутри TStringList.IndexOf можно искать?
← →
DiamondShark © (2005-01-13 16:01) [27]
> Кто найдет условный оператор или операторы сравнения, пусть
> бросит в меня камень :)
А внутри TStringList.IndexOf можно искать?
← →
Sandman25 © (2005-01-13 16:04) [28][26] DiamondShark © (13.01.05 16:00)
Конечно, нет. А то мы так и до jnz доберемся :)
← →
MBo © (2005-01-13 16:28) [29]
function StrEQ(s1, s2: string): Boolean;
function IsZero(i: Integer): Boolean;
begin
Result := Boolean((i - 1) shr 31);
end;
function EQStr(s1, s2: string): Boolean;
var
i, xr: Integer;
begin
xr := 0;
for i := 1 to Length(s1)
do Inc(xr, Byte(s1[i]) xor Byte(s2[i]));
Result := IsZero(xr);
end;
begin
Result := (IsZero(Length(s1) xor Length(s2))) and EQStr(s1, s2);
end;
← →
KSergey © (2005-01-13 16:35) [30]> [25] Reindeer Moss Eater © (13.01.05 16:00)
Вот и у меня такое-же подозрение....
← →
4eshka) (2005-01-13 16:36) [31]
> один простой и некрутой и незапутанный условный переход.
Ты его для начала найди :))
> Забыв при этом
Здесь хоть слово про защиту программы было? НЕТ. Так что не нужно глупости говорить
← →
DiamondShark © (2005-01-13 16:40) [32]
> Sandman25 © (13.01.05 16:04) [28]
>
> Конечно, нет. А то мы так и до jnz доберемся :)
Было бы желание -- обойдёмся и без jnz.
← →
begin...end © (2005-01-13 16:47) [33]
function IsEqual(const S1, S2: String): Boolean;
var
L1, L2: Integer;
begin
L1 := Length(S1);
L2 := Length(S2);
Result := False;
try
L1 := L1 div (L1 xor L2)
except
Result := CompareMem(@S1[1], @S2[1], L1)
end
end.
← →
begin...end © (2005-01-13 16:58) [34]А ещё лучше так:
function New_IsEqual(const S1, S2: String): Boolean;
var
L1, L2: Integer;
begin
{$B-}
L1 := Length(S1);
L2 := Length(S2);
Result := CompareMem(@L1, @L2, SizeOf(Integer)) and CompareMem(@S1[1], @S2[1], L1)
end.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.045 c