Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CompareStr Erläuterung? Alternativen? (https://www.delphipraxis.net/160628-comparestr-erlaeuterung-alternativen.html)

Elexarie 23. Mai 2011 17:52

CompareStr Erläuterung? Alternativen?
 
Hallo Community,

wir sollen als Hausaufgabe die Funktion 'CompareStr' verwenden. Ich habe innerhalb dieser Funktion keinerlei Sinn gesehen und meinen Lehrer darauf angesprochen. Mir selber erscheint dieser als recht unerfahren und auch er hatte gewaltige Probleme mir zu erläutern, was dahinter steckt. Auch einige Referenzen wollten mich nicht aufklären.

Es handelt sich um die Funktion:
Code:
CompareStr(s1, s2)
Wir sollen einen Text (Edit1.Text) auf den Charakter 'e' überprüfen.

Rein logisch würde es doch dann dementsprechend wiefolgt aussehen:
Code:
begin

        if (CompareStr((Edit1.Text), 'e') > 0) then
              Label4.Caption := 'Es ist mindestens ein "e" vorhanden'

        else if (CompareStr((Edit1.Text),'e') < 0) then
              Label4.Caption := 'Es ist kein "e" vorhanden'

        else // CompareStr (...) = 0
              Label4.Caption := 'Es ist genau ein "e" vorhanden'
end;
Laut der Defintion unser Funktion lautet es wiefolgt:
Zitat:

Integer: <0, falls 1.String lex größer als 2.String, =0 falls beide gleich, >0, falls 1.String kleiner als 2. String
Täusche ich mich? Hat mein Lehrer bzw. der Arbeitszettel unrecht? Ist meine Überprüfung falsch?
Habt ihr direkt einen Vorschlag, den ich anstelle von CompareStr verwenden kann?

Mit freundlichen Grüßen,

Elex.

Sir Rufo 23. Mai 2011 18:10

AW: CompareStr Erläuterung? Alternativen?
 
Dafür gibt es die Online-Hilfe und wenn die aus welchen Gründen auch immer nicht zur Verfügung steht, dann schaut man da Delphi-Referenz durchsuchenCompareStr

Allerdings wird CompareStr eher zur Sortierung gebraucht, als dazu festzustellen ob in einem String ein anderer String enthalten ist.

BenjaminH 23. Mai 2011 18:29

AW: CompareStr Erläuterung? Alternativen?
 
Zitat:

Zitat von Elexarie (Beitrag 1102399)
Code:
if (CompareStr((Edit1.Text), 'e') > 0) then
     Label4.Caption := 'Es ist mindestens ein "e" vorhanden'
else if (CompareStr((Edit1.Text),'e') < 0) then
     Label4.Caption := 'Es ist kein "e" vorhanden'
else // CompareStr (...) = 0
     Label4.Caption := 'Es ist genau ein "e" vorhanden'

Hi,
das stimmt so nicht, CompareStr sortiert. D.h. der 1. Fall bedeutet, der Text fängt mit einem Buchstaben nach "e" an.
Der 2. Fall bedeutet er fängt mit einem Buchstaben vor "e" an.(Könnte sein, dass ich beide Fälle vertausche)
im 3. Fall ist der Text genau ein "e".
Also ist wie du es prüfen willst wohl am ehesten so:
Code:
if CompareStr (...) = 0
   Label4.Caption := 'Das Editfeld hat "e" als Text'

Stevie 23. Mai 2011 18:56

AW: CompareStr Erläuterung? Alternativen?
 
Mögliche Alternativen: ContainsText, Pos oder PosEx

Namenloser 23. Mai 2011 19:04

AW: CompareStr Erläuterung? Alternativen?
 
Wenn euer Lehrer euch wirklich den Auftrag gegeben hat, mithilfe der Funktion CompareStr einen String zu durchsuchen, ist er eine Lusche (was mich nicht weiter wundern würde, scheint bei Informatiklehrern Standard zu sein).

CompareStr ist, wie bereits gesagt wurde, dafür da, um Strings zu sortieren:
Delphi-Quellcode:
CompareStr('Apfel', 'Birne')
ergibt -1 ('Apfel' kommt alphabetisch vor 'Birne')
Delphi-Quellcode:
CompareStr('Birne', 'Apfel')
ergibt 1 ('Birne' kommt nach 'Apfel')
Delphi-Quellcode:
CompareStr('Apfel', 'Apfel')
ergibt 0 (ist klar, beide sind gleich)
Es wird hierbei immer nur der gesamte String verglichen.

Wenn du einen String nach einem anderen String durchsuchen willst, ist die Funktion Delphi-Referenz durchsuchenPos dein Freund. Sie gibt als Ergebnis die Position zurück, an der der zu suchende String gefunden wurde, bzw. 0 wenn kein Treffer gefunden wurde.
Delphi-Quellcode:
Pos('A', 'Apfel')
ergibt 1
Delphi-Quellcode:
Pos('pf', 'Apfel')
ergibt 2
Delphi-Quellcode:
Pos('el', 'Apfel')
ergibt 4
Delphi-Quellcode:
Pos('Z', 'Apfel')
ergibt 0
usw...

Elexarie 23. Mai 2011 21:21

AW: CompareStr Erläuterung? Alternativen?
 
Vielen Dank.

Dann unterrichten sie schon Delphi an einem technischen Gymnasium (ich persönlich bin kein Freund hiervon) und dann auch noch falsch. Tut mir Leid, aber armes Bildungssystem.

Danke an alle Hilfen.

Der Lehrer darf sich was von mir anhören. Ich hatte den Verdacht schon am letzten Info-Tag.

DeddyH 24. Mai 2011 07:06

AW: CompareStr Erläuterung? Alternativen?
 
[erbsenzählen]CompareStr sortiert nicht, sondern gibt eine Zahl zurück, welche man für eine Sortierung auswerten kann.[/erbsenzählen]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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