| Autor |
Beitrag |
elbucko
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 13.09.04 23:03
HAllo erst mal. mein erster tag im forum beginnt natürlich mit meinem ersten problem.
hab in der suche nichts ähnliches gefunden:
hab eine function geschrieben, die angibt ob ein string (STR1) in einem anderen (STR2) enthalten ist:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| function IsStrIn(STR1: String; STR2: String): Boolean; var L1,L2 : Integer; P1,P2 : Integer; Z1 : Integer; b1 : Boolean; begin
L1 := length(STR1); L2 := length(STR2); P1 := 0; P2 := 0; Z1 := 0; b1 := false;
If L1 > L2 then IsStrIn := false else begin repeat
if STR1[P1] = STR2[P2] then begin Z1 := Z1 + 1; P1 := P1 + 1; P2 := P2 + 1; end else begin P2 := P2 + 1; P1 := 0; Z1 := 0; end;
if Z1 = L1 then b1 := true; if P2 > L2 then b1 := true; if P1 > L1 then b1 := true;
until B1;
if Z1 = L1 then IsStrIn := true else IsStrIn := false; end; end; |
rein logisch gesehen müsste das ganze funktionieren. aber der if-satz in zeile 22 - 33 macht genau das gegenteil von dem was er machen soll:
wenn "STR1[P1] = STR2[P2]" also zum beispiel 'a' = 'a' (also TRUE) dann führt er die befehle hinter dem "else" aus, obwohl er diese ja nur dann ausführen sollte wenn z.B. 'a' = 'b' (also FALSE).
Wenn ich aus "STR1[P1] = STR2[P2]" -> "STR1[P1] <> STR2[P2]" mache, dann funktioniert es zwar, aber das macht doch keinen sinn oder? kann mir einer erklären was ich falsch mache oder wo mein denkfehler liegt?
ach so, noch etwas: wenn STR1 am Anfang von STR2 vorkommt:
STR1 := '<TABLE';
STR2 := '<TABLE width=100%>;
dann tritt der fehler nicht auf.
wenn aber
STR1 := 'ABLE';
STR2 := '<TABLE width=100%>;
dann tritt obiger fehler auf.
obwohl 'a' <> '<' (mit P1 = P2 = 0 )führt er trotzdem die befehle
Z1 := Z1 + 1;
P1 := P1 + 1;
P2 := P2 + 1;
aus.
HILLLFFFFEEEEEEE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Moderiert von Motzi: Code- durch Delphi-Tags ersetzt.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 13.09.04 23:45
Was soll den deine ganze Funktion eigentlich machen? Und ganz nebenbei bemerkt, das erste Zeichen eines Strings steht an der Stelle 1 und nicht 0.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Di 14.09.04 01:49
_________________ Gruß
Hansa
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 02:12
@hansa: Das ist geschmackssache.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Di 14.09.04 02:14
und was wird grundsätzlich initiiert, false oder true 
_________________ Gruß
Hansa
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 02:16
False, hat er doch oben geschrieben beim Initialisieren der Variablen.
|
|
merlin83
      
Beiträge: 89
Win 98, Win 2000, SuSE Linux 9.3 Prof
D7 Personal, D2k5 Personal, Kylix
|
Verfasst: Di 14.09.04 06:32
Moin!
Wenn du prüfen willst, ob ein String in einem anderen enthalten ist, geht das am besten (finde ich) mit If copy(String1,Startzeichen,length(String2))=String2 then Anweisungen;
Das mach ich eigentlich immer so und funktioniert perfekt.
Viele Grüße,
merlin83
_________________ If ProblemExists=True
Then ProblemExists:=False;
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.09.04 07:10
Ich mag mich ja irren, aber genügt nicht die Pos-Funktion ??
Delphi-Quelltext 1:
| if Pos(STR1,STR2) > 0 then "Denn isser enthalten" |
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 10:37
Gehen wir halt noch nen Schritt weiter. *gg*
Wie wär's mit der Funktion:
Quelltext
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.09.04 10:43
Ich glaube, wir haben hier was falsch verstanden. Ich denke, er hat eine Hausaufgabe, in der er die vorgestellten Funktionen nicht benutzen darf.
Somit war der Hinweis, dass er P1 und P2 erst bei 1 anfangen lassen darf, der richtige Tip.
Auf jeden Fall sollte die Routine aber noch prüfen, ob die Strings nicht leer sind.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 11:25
Dann soll er sie nachprogrammieren
Am besten ne Pos - Funktion die auch Case- Sensitiv ist. 
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.09.04 11:42
Aber bitte in asm. Dann gehts schneller.
| Zitat: |
Am besten ne Pos - Funktion die auch Case- Sensitiv ist
|
Wie war das mit dem Hilfe-Text zur Pos-Funktion? Die sollte man besser nicht lesen, damit man die Funktion versteht.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 11:45
| jasocul hat folgendes geschrieben: | Aber bitte in asm. Dann gehts schneller.
| Zitat: |
Am besten ne Pos - Funktion die auch Case- Sensitiv ist
|
Wie war das mit dem Hilfe-Text zur Pos-Funktion? Die sollte man besser nicht lesen, damit man die Funktion versteht. |
Wieso? ist doch klar verständlich. Wenn man die deutsche Hilfe hat, sollte man nur wissen, dass dort ein fehler drin ist. Denn pos ist casesensitive und nicht, anderes rum, wie es die deutsche Hilfe behauptet.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 14.09.04 12:05
Sorry, nächstes mal hebe ich die Ironie deutlicher hervor.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Di 14.09.04 12:23
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
elbucko 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 15.09.04 18:54
@luckie:
| Zitat: | | Und ganz nebenbei bemerkt, das erste Zeichen eines Strings steht an der Stelle 1 und nicht 0. |
da lag der fehler, jetzt funktioniert alles wie es soll. Danke!
@Hansa:
ob nun
Delphi-Quelltext 1:
| if Z1 = L1 then b1 := true; |
oder
Delphi-Quelltext
ist doch wurst. kenne beide schreibweisen und finde meine übersichtlicher.
@jasocul:
ja, die pos-funktion genügt zunächst vollkommen. allerdings ist das hier erstmal die vorarbeit für eine grössere funktion, die in dreidimensionalen string-arrays nach bestimmten würfeln suchen soll. wollte bevor ich das in angriff nehme erst mal einfache strings unter kontrolle bringen. (woran ich ja fast gescheitert wäre  )
ach ja: es ist keine hausaufgabe. hab schon lange keine schule mehr von innen gesehen. 
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 15.09.04 19:01
_________________ Gruß
Hansa
|
|
elbucko 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 15.09.04 19:37
hast gewonnen, so gesehen macht deine version mehr sinn. 
|
|