Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.039 c
1-1106124455
Пчелка
2005-01-19 11:47
2005.01.30
Метод ObjNew компонента F1Book


1-1105885062
Piter
2005-01-16 17:17
2005.01.30
Что означают параметры в директивах


1-1106032507
Newby
2005-01-18 10:15
2005.01.30
Разбиение текста


1-1106046420
ShimON
2005-01-18 14:07
2005.01.30
Обработать выход из Windows


1-1105818231
Dmitry_04
2005-01-15 22:43
2005.01.30
Как лучше хранить настройки программы?





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