![]() |
Doppelte Zeichen auslesen
Hallo Alle!
Gibt es unter Delphi eine Funktion mit der man doppelte Zeichen in einem String auslesen kann und als Ausgabe die Anzahl der Doppelten Zeichen bekommt? Gruß Heike |
Re: Doppelte Zeichen auslesen
Sollen die Zeichen direkt aufeinander folgen?
|
Re: Doppelte Zeichen auslesen
Zitat:
Gruß Heike |
Re: Doppelte Zeichen auslesen
Hallo Heike,
habe ich in dem Thread gefunden: ![]()
Delphi-Quellcode:
Result := Length(S) - Length(StringReplace(S, Ch, '', [rfReplaceAll]));
wobei ch Dein gesuchter Buchstabe ist. Grüße Klaus |
Re: Doppelte Zeichen auslesen
Zitat:
Genau daruf bin ich nicht gekommen ;-) Gruß Heike |
Re: Doppelte Zeichen auslesen
da ich mir jetzt so ne Mühe gemacht habe ne Funktion zu Schreiben, poste ich sie jetzt trotzdem, obwohl sie nicht halb so elegant, wie die von Klaus01 ist.
Delphi-Quellcode:
function Kette( s:string; c: string; o:integer): Integer;
var i, cnt, cnt2: Integer; begin cnt := 0; i:=0; i := Posex( c, s, o); while (i < length(s)) and (i > 0) do begin Inc( cnt); if s[i+1] = s[i] then begin inc(i); end else Break; end; if (i < Length( s)) and (i > 0) then begin cnt2 := Kette( s, c, i+1); if cnt2 > cnt then cnt := cnt2+1; end; Result := cnt; end; |
Re: Doppelte Zeichen auslesen
Ich möchte noch drauf hinweisen das Klaus01's Methode nicht das macht was gefragt war.
wenn zB auf 'AABBAA' mit 'A' abgefragt wird, antwortet seine 4...dabei sind nur jeweils 2 direkt hintereinander. dafür würde ich soetwas nehmen:
Delphi-Quellcode:
function FindChain(S: String; C: Char): Integer;
var ID, Cnt: Integer; begin Result:=0; ID:=1; Cnt:=0; while (ID>0) and (ID<=Length(S)) do begin if S[ID]=C then begin Inc(ID); Inc(Cnt); end else begin if Cnt>Result then Result:=Cnt; Cnt:=0; ID:=PosEx(C,S,ID); end; end; end; |
Re: Doppelte Zeichen auslesen
AABBAABA ergibt sogar 5, was ebenfalls falsch ist.
möglich wäre höchstens noch sowas,
Delphi-Quellcode:
wobei man dieses auch wieder in 'ner Schleife durchgehen müßte, da StringReplace das Ersetzungsergebnis nicht wieder in den nächsten Suchvorgang mit einbezieht:
Result := Length(S) - Length(StringReplace(S, Ch + Ch, Ch, [rfReplaceAll]));
Delphi-Quellcode:
wobei ich dennoch einen Code empfehlen würde, wo der String nicht (intern) verändert wird ... unnötige String-/Speicheroperationen müssen ja nicht sein. :angel:
Temp := S;
Repeat Temp2 := Temp; Temp := StringReplace(Temp, Ch + Ch, Ch, [rfReplaceAll])); Until Temp = Temp2; Result := Length(S) - Length(Temp); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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