AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Zeichen auslesen

Ein Thema von smart · begonnen am 27. Aug 2006 · letzter Beitrag vom 28. Aug 2006
Antwort Antwort
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#1

Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 16:35
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
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 16:41
Sollen die Zeichen direkt aufeinander folgen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 16:45
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
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 16:59
Hallo Heike,

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


Result := Length(S) - Length(StringReplace(S, Ch, '', [rfReplaceAll]));
wobei ch Dein gesuchter Buchstabe ist.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 17:11
Zitat von Klaus01:

Result := Length(S) - Length(StringReplace(S, Ch, '', [rfReplaceAll]));
Vielen Dank, Klaus!

Genau daruf bin ich nicht gekommen

Gruß
Heike
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 17:18
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: Doppelte Zeichen auslesen

  Alt 27. Aug 2006, 17:27
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;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#8

Re: Doppelte Zeichen auslesen

  Alt 28. Aug 2006, 15:28
AABBAABA ergibt sogar 5, was ebenfalls falsch ist.

möglich wäre höchstens noch sowas,
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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