Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Doppelte Zeichen auslesen (https://www.delphipraxis.net/75940-doppelte-zeichen-auslesen.html)

smart 27. Aug 2006 16:35


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

mkinzler 27. Aug 2006 16:41

Re: Doppelte Zeichen auslesen
 
Sollen die Zeichen direkt aufeinander folgen?

smart 27. Aug 2006 16:45

Re: Doppelte Zeichen auslesen
 
Zitat:

Zitat von mkinzler
Sollen die Zeichen direkt aufeinander folgen?

Ja, wenn z.B. in einem String "BAAAAA" steht, soll als Ergebnis, wenn ich "A" abfrage, 5 rauskommen.

Gruß
Heike

Klaus01 27. Aug 2006 16:59

Re: Doppelte Zeichen auslesen
 
Hallo Heike,

habe ich in dem Thread gefunden: http://groups.google.de/group/de.com...9aac509740022a


Delphi-Quellcode:
Result := Length(S) - Length(StringReplace(S, Ch, '', [rfReplaceAll]));

wobei ch Dein gesuchter Buchstabe ist.
Grüße
Klaus

smart 27. Aug 2006 17:11

Re: Doppelte Zeichen auslesen
 
Zitat:

Zitat von Klaus01

Delphi-Quellcode:
Result := Length(S) - Length(StringReplace(S, Ch, '', [rfReplaceAll]));

Vielen Dank, Klaus!

Genau daruf bin ich nicht gekommen ;-)

Gruß
Heike

mkinzler 27. Aug 2006 17:18

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;

glkgereon 27. Aug 2006 17:27

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;

himitsu 28. Aug 2006 15:28

Re: Doppelte Zeichen auslesen
 
AABBAABA ergibt sogar 5, was ebenfalls falsch ist.

möglich wäre höchstens noch sowas,
Delphi-Quellcode:
Result := Length(S) - Length(StringReplace(S, Ch + Ch, Ch, [rfReplaceAll]));
wobei man dieses auch wieder in 'ner Schleife durchgehen müßte, da StringReplace das Ersetzungsergebnis nicht wieder in den nächsten Suchvorgang mit einbezieht:
Delphi-Quellcode:
Temp := S;
Repeat
  Temp2 := Temp;
  Temp := StringReplace(Temp, Ch + Ch, Ch, [rfReplaceAll]));
Until Temp = Temp2;
Result := Length(S) - Length(Temp);
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:


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