Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stringvergleich nicht wie gewünscht (https://www.delphipraxis.net/54532-stringvergleich-nicht-wie-gewuenscht.html)

Puhbaehr 6. Okt 2005 12:41

Re: Stringvergleich nicht wie gewünscht
 
So habs eben mal ausprobiert.

'A' = 'a' bringt false
auch z.B. 'Ampel' und 'ampel' bringt false
Also wo ist das Problem?

Und das Addieren von Zahlen zu einem Zeichen lässt sich durch
Code:
chr (ord ('A') + 1)
realisieren.

padavan 6. Okt 2005 13:02

Re: Stringvergleich nicht wie gewünscht
 
Im Moment gar keins,

wie gesagt, hab bestimmt einen anderen Fehler gemacht, aber irrtümlicherweise gedacht, Comparestring funzt nicht wie ich will....

tigerman33 6. Okt 2005 16:59

Re: Stringvergleich nicht wie gewünscht
 
@Puhbaer:
Nach Pascal-Syntax liefert 'A'+'B' weder ƒ noch einen Compilerfehler, sondern 'AB'.

Puhbaehr 6. Okt 2005 22:19

Re: Stringvergleich nicht wie gewünscht
 
Stimmt stimmt hast recht.
Aber dafür bringt chr (ord ('A') + ord ('B')) das gewünschte Ergebnis :) Sorry für den kleinen Fehler ;)

ripper8472 6. Okt 2005 23:16

Re: Stringvergleich nicht wie gewünscht
 
wenn mein code schnippsel nicht das macht, was ihr wollt, dann schreibt ihn eben um.

waers nicht einfacher, mal eben so eine funktion zu schreiben?

padavan 7. Okt 2005 05:26

Re: Stringvergleich nicht wie gewünscht
 
sagt mal,

das sollte doch funktionieren oder:

Delphi-Quellcode:
if comparestr(Edit1.text,'irgenwas') = 0 then begin
//tu was
end;
Aber wenn ich das so mache, dann wird zwar auf Groß und klein geachtet, aber mein ursprüngliches Problem bleibt,
und die Bedingung ist trotzdem erfüllt, auch wenn ich nochwas an 'irgendwas' dranhänge. Z.B. 'irgendwasaaa'.
Ich will aber doch nur das die Bedingung erfüllt ist, wenn die String Haargenau identisch sind.
:cry:


Lasse ich es mir so anzeigen,
Delphi-Quellcode:
label1.caption := inttostr(comparestr(Edit1.text,'irgendwas'));
dann geht´s, dann bekomme ich die Differenz zu 0

Ich versteh gar nix
:wiejetzt:

ripper8472 7. Okt 2005 06:08

Re: Stringvergleich nicht wie gewünscht
 
meine guete, werd ich hier absichtlich ueberlesen?!?

schreib dir so eine funktion, wenn du keine passende findest!

und wenn du willst, schreib ich dir sogar persoenlich eine. nur muss ich mir vorher erstmal einen pascal compiler installieren...

//edit:

hast du ein glueck, dass ich ne version vom gnu pascal compiler irgendwann mal installiert hab... kriegst deine funktion gleich

padavan 7. Okt 2005 06:20

Re: Stringvergleich nicht wie gewünscht
 
Moment, bevor du dir Mühe machst.
Was denn für eine Funktion?
Erklär mir lieber, warum sich comparestr nicht das tut was ich will
:)

Andererseits bin ich echt gespannt was du vorhast....

ripper8472 7. Okt 2005 06:37

Re: Stringvergleich nicht wie gewünscht
 
ich hab keine ahnung, wieso comparestring sich so verhaelt, wie du es berichtest.
entweder liefert die funktion nicht das verhalten, das du brauchst, oder du interpretierst die rueckgabewerte falsch.

ich wuerde eine funktion schreiben, die nur fuer byteidentische strings 0 zurueckgibt. fuer alle anderen faelle wird die bytedifferenz der ersten ungleichen zeichen zurueckgegeben. bei ungleichlangen strings wird eventuell die differenz des ersten ueberlangen zeichens zum null-zeichen zurueckgegeben.

damit verhaelt sich die funktion, die ich schreiben wuerde, nahezu identisch zum C aequivalent strcmp(). einziger unterschied: strcmp() returnt nur -1, 0 oder 1 waehrend ich auch <-1 und >1 zurueckgeben wuerde.

uebrigens:
"stringa = stringb" tut genau was du willst.
gross/kleinschreibung wird beachtet und auch die laenge.

Delphi-Quellcode:
function strcmp(a, b: string): integer;
{ strcmp(foo,foo) = 0
  strcmp(FOO,foo) = -32
  strcmp(foo,faa) = 14
  strcmp(faa,foo) = -14
  strcmp(foox,foo) = 120
  strcmp(foo,foox) = -120 }
var
   i: integer;
   c,d: byte;
begin
   result := 0;
   i := 1;
   repeat
      if a[i] <> b[i] then
      begin
         result := ord(a[i]) - ord(b[i]);
      end;
      inc(i);
   until (i > length(a)) or (i > length(b));

   if length(a) > length(b) then
      result := ord(a[length(b)+1])
   else if length(a) < length(b) then
      result := -ord(b[length(a)+1]);
   { ANSI C behaviour compatibility: }
   { result := byte(result > 0) - byte(result < 0); }
end;

marabu 7. Okt 2005 06:54

Re: Stringvergleich nicht wie gewünscht
 
Hallo Leute,

wie kann man nur so aneinander vorbei schreiben...

Die klassische Identität zweier Zeichenketten wird durch den Operator = ermittelt. Dabei werden intern die code values der einzelnen Zeichen paarweise verglichen und bei Abweichung oder Längenunterschied abgebrochen. Dieser primitive Test wird von CompareStr() nachvollzogen. Die Funktion existiert eigentlich nur, weil sie oft als compare function für quick sort und binary search benötigt wird.

Wenn ich nur einen simplen identity check brauche, dann verwende ich den intern überladenen Gleichheits-Operator "=". Bei anderen Anforderungen muss man genauer schauen.

Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz