PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delphi5: Mehrfach vorkommende Buchstaben nicht übernehmen


Gast
2004-11-16, 21:11:02
Guten Nabend User,

ich hab ein kleines Problem und zwar möchte ich einen String über ein EditFeld eingeben, diesen jedoch ohne mehrfach vorkommende Buchstaben in einen neuen String schreiben.
Hier ein Beispiel:
Das hier schreib ich ins EditFeld: TESTTERM
In meiner neuen String Variable möchte ich aber TESRM drinstehen haben.
Nach diversen Versuchen hab ich schließlich aufgegeben und suche hier Hilfe. Hoffe ist einer so gnädig und hilft mir bei diesem sicherlich nicht allzuschweren Problem.

Plutos
2004-11-16, 22:53:09
Hmm, is ne Zeit her, dass ich das letzte mal in Delphi programmiert hab. Also schematisch:
schreib ne Prozedur, die den n-ten Buchstaben mit allen n-1 Buchstaben, die davor stehen, vergleicht; wenn der n-te Buchstabe gleich einem der n-1 Buchstaben davor ist (Stichpunkte: Schleife for i=1 to n-1 und if Buchstabe(n)=Buchstabe(i) then *weg damit* else *weiterverwenden*), schmeiß ihn weg; ansonsten schreib ihn in einen neuen string. Es gibt Funktionen, mit denen du ganz einfach den n-ten Buchstaben eines Strings auslesen kannst (könnte sowas wie pos sein), dann dürfte das kein Problem mehr sein. Könnte bei sehr sehr sehr langen Strings performancemäßig unter aller Sau sein, aber ich glaube, das ist für deine Zwecke nebensächlich. Wenn ich Zeit hab, versuch ich mal, dir nachher noch ein Stück Sourcecode zusammenzubasteln (in Delphi 6, müßte bei so einfachen Stringmanipulationen eigentlich völlig kompatibel sein). Kann aber bisschen dauern, schau mal was die anderen schreiben, oder probiers mit der "Anleitung" oben selbst

Maik Rutsche
2004-11-17, 03:26:40
Hier mal das was ich kurz geschrieben habe:


function RemoveMultipleChars(Text: String): String;
var
n, p: Integer;
c: Char;
begin
Result := '';
p := 0;
while p < Length(Text) do
begin
c := Text[p+1];
n := 1;
while (p+n < Length(Text)) and (Text[p + n + 1] = c) do
Inc(n);

Result := Result + c;

if (n > 1) then
p := p + n
else
Inc(p);
end;
end;


Entfernt alle Mehrfachvorkommen von Zeichen, Zeichen bleiben aber im String erhalten.
Z.b. 'aabbbcccc' wird zu 'abc'

bzw.


function RemoveMultipleChars(Text: String): String;
var
n, p: Integer;
c: Char;
begin
Result := '';
p := 0;
while p < Length(Text) do
begin
c := Text[p+1];
n := 1;
while (p+n < Length(Text)) and (Text[p + n + 1] = c) do
Inc(n);


if (n > 1) then
p := p + n
else
begin
Result := Result + c;
Inc(p);
end;
end;
end;

Merhfachvorkommen werden entfernt.
'abbcccdde' wird zu 'ae'

MfG

Maik