![]() |
String untersuchen...
Folgendes Problem:
Ein vom User eingegebener String (via editfeld) soll darauf untersucht werden, ob ein zweiter eingegebener String (editfeld) mehr als drei aufeinander folgender Zeichen gleich hat. Bsp: edit1:='langerName' edit2:='german' In diesem Fall müsste das Programm anspringen, da in edit1 u. edit2 die zeichenfolge 'ger' verwendet wurde. Habe es mal so gemacht, allerdings funktioniert das nur solange wie mein edit2 text kürzer als edit1 text ist.
Delphi-Quellcode:
//Nicht drei aufeinander folgende Zeichen aus dem Benutzernamen
StrBenutzer:=...; if Pos(newstring, StrBenutzer) > 0 then //Suchen in Benutzername nach erstem gleichen eingegebenem Zeichen aus Kennwort(newstring) if AnsiCompareText(TableBenutzerBenutzer.Text, StrBenutzer) <= 0 then //Wenn weitere identisch ungültiges Passwort begin messagedlg('Aufeinander folgende Zeichen aus Benutzername sind nicht erlaubt.', mtInformation, [mbOk],0); ClickedOK:=False; end; |
Re: String untersuchen...
hab das bissl probiert und bei meinen testfällen hats geklappt... Kann aber sein in dem Source is noch nen fehler oder sowas drin
Delphi-Quellcode:
function isdrin(bigone: String; littleone: String; mingleich: Integer; casesensitiv: Boolean = False): Boolean;
var wdh1: Integer; begin if casesensitiv then begin bigone := lowercase(bigone); littleone := lowercase(littleone); end; result := False; wdh1 := 1; while (wdh1 + mingleich - 1 <= length(littleone)) and (result = False) do begin if pos(copy(littleone,wdh1, mingleich), bigone) > 0 then result := True; wdh1 := wdh1 + 1 end; end; |
Re: String untersuchen...
danke erstmal.
Nur hast Du da wohl was falsch verstanden. Der Benutzer darf ja einen selben Buchstaben verwenden, nur ab drei gleich aufeinander folgenden soll Eingabe nicht akzeptiert werden. Dabei kann der 2. string natürlich auch kürzer sein, sprich der string 2 liegt zwischen 3 und x Buchstaben (x wird immer unter 20 liegen). Bsp.1: edit1 eingegeben: Administrator edit2 eingegeben: fussballtor Nun soll proggi das 'tor' erkennen Bsp.2: edit1 eingegeben: Herbert edit2 eingegeben: Heben Nun soll proggi das 'he' und 'be' nicht anmeckern, erst ab 3en. gleichen Buchstaben. Müsste allen klar sein wie ich es meine. Wie mache ich es unabhängig vn der stringlänge? PS: So ganz kapiert habe ich die source in obigem post nicht... |
Re: String untersuchen...
Mal ein ungesteter Schnellschuß:
Delphi-Quellcode:
if (pos('beg', s1) > 0) and (pos('beg', s2) > 0) then
...; |
Re: String untersuchen...
PseudoCode:
Delphi-Quellcode:
Function ... (Str1, Str2: String):Boolean;
var i : integer; tmp : String; begin Result := False; if ( length(Str1) < 3 ) or ( length(Str2) < 3 ) then exit; // nothing to do for i := 1 to Length( Str1 ) - 2 do begin Tmp := Copy( Str1, i, 3 ); if pos( Tmp, Str2 ) > 0 then begin Result := True; Break; end; end; end; |
Re: String untersuchen...
@lucki:
mir ist unklar welche string ich in die zwei Funktionen einsetzen soll/muss. Habe doch nur einen hauptstring welcher mit dem zweitstring überprüft werden soll. @Tom: irgendwie funktioniert dass nicht wirklich, entweder er meckert mir immer herum, oder er akzeptiert gleiche string. Werd noch wahnsinnig mit der Funktion :wall: |
Re: String untersuchen...
s1 und s2 sind die Strings, die du überprüfen willst umd 'beg' ist die zu untersuchende Zeichenfolge.
|
Re: String untersuchen...
ich habe doch eine variable zeichenfolge die ich untersuchen will
|
Re: String untersuchen...
Zitat:
1) "Meckert rum" ist so ziemlich die sinnvollste Art der Wiedergabe einer Fehlermeldung. 2) Der Source tut es. 3) True wird zurückgegeben, wenn 3 Buchstaben identisch sind. 4) Es wird zwischen Groß- und Kleinschreibung unterschieden. |
Re: String untersuchen...
Zitat:
2) tut was :oops: 3) das klappt bei mir leider nicht, momentan bringt er es jedes mal. 4) ist ausnahmsweise mal klar :stupid: |
Re: String untersuchen...
Was soll der Source wohl tun? Funktionieren?
Delphi-Quellcode:
Benötigt: Zwei Editfelder, 1 Button und ButtonClick im OI zuweisen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } Function Test (Str1, Str2: String):Boolean; end; var Form1: TForm1; z : Integer; implementation {$R *.dfm} Function TForm1.Test (Str1, Str2: String):Boolean; var i : integer; tmp : String; begin Result := False; if ( length(Str1) < 3 ) or ( length(Str2) < 3 ) then exit; // nothing to do for i := 1 to Length( Str1 ) - 2 do begin Tmp := Copy( Str1, i, 3 ); if pos( Tmp, Str2 ) > 0 then begin Result := True; Break; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if test( edit1.Text, edit2.Text ) then ShowMessage( 'True' ); end; end. |
Re: String untersuchen...
jo, das läuft - und funktioniert genauso wie es soll!
Werd ma schauen wo mein Fehler war, und machs public. Tausend dank! Hätte ich nicht auf die Reihe bekommen :thuimb: edit: argh... ich idiot! Hatte anstatt meines newstrings aus der funktion InputQuery meinen alten string aus dem edit feld benutzt. Muss natürlich den neuen string auf Korrektheit überprüfen. :roteyes: |
Re: String untersuchen...
Zitat:
|
Re: String untersuchen...
habs grad mal schenll getestet, funktioniert aber irgendwie nicht - wobei das ja nichts zu sagen hat wenn ich es probiere :angle2:
|
Re: String untersuchen...
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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-2025 by Thomas Breitkreuz