![]() |
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:
realisieren.
chr (ord ('A') + 1)
|
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.... |
Re: Stringvergleich nicht wie gewünscht
@Puhbaer:
Nach Pascal-Syntax liefert 'A'+'B' weder ƒ noch einen Compilerfehler, sondern 'AB'. |
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 ;) |
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? |
Re: Stringvergleich nicht wie gewünscht
sagt mal,
das sollte doch funktionieren oder:
Delphi-Quellcode:
Aber wenn ich das so mache, dann wird zwar auf Groß und klein geachtet, aber mein ursprüngliches Problem bleibt,
if comparestr(Edit1.text,'irgenwas') = 0 then begin
//tu was end; 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:
dann geht´s, dann bekomme ich die Differenz zu 0
label1.caption := inttostr(comparestr(Edit1.text,'irgendwas'));
Ich versteh gar nix :wiejetzt: |
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 |
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.... |
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; |
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 04:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz