AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Stringvergleich nicht wie gewünscht

Stringvergleich nicht wie gewünscht

Ein Thema von padavan · begonnen am 6. Okt 2005 · letzter Beitrag vom 7. Okt 2005
Antwort Antwort
Seite 3 von 4     123 4   
Puhbaehr
(Gast)

n/a Beiträge
 
#21

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 13:41
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.
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 14:02
Im Moment gar keins,

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

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#23

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 17:59
@Puhbaer:
Nach Pascal-Syntax liefert 'A'+'B' weder ƒ noch einen Compilerfehler, sondern 'AB'.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#24

Re: Stringvergleich nicht wie gewünscht

  Alt 6. Okt 2005, 23:19
Stimmt stimmt hast recht.
Aber dafür bringt chr (ord ('A') + ord ('B')) das gewünschte Ergebnis Sorry für den kleinen Fehler
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#25

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 00:16
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?
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 06:26
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.



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

Ich versteh gar nix
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#27

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 07:08
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
Christoph
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 07:20
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....
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#29

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 07:37
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;
Christoph
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 07:54
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
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