Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Position von Zeichen mit Komma ausgeben


basti_G - Fr 15.05.09 19:31
Titel: Position von Zeichen mit Komma ausgeben
folgendes problem stellt sich mir:

ich gebe eine zeichenkette in ein editfeld ein, in ein anderes einen buchstaben! klicke dann auf meinen button "auswerten" und folgendes soll passieren: in einem weiteren editfeld soll ausgegeben werden, wie oft der gesuchte buchstabe in der zeichenkette vorkommt, in einem nächsten soll ausgegeben werden wie lang die zeichenkette insgesamt ist ---> bis hier funktioniert alles!

jetzt mein problem: in einem letzten editfeld sollen die stellen ausgegeben werden (mit komma getrennt), an denen der gesuchte buchstabe in der zeichenkette vorkommt ! --> bloß wie ist der befehl dafür???

wäre für hilfe sehr dankbar!


Delete - Fr 15.05.09 19:59

Wenn Du sowieso schon die Zeichenkette durchläufst (for-Schleife?), kannst Du die gefundene Position doch gleich an den letztlich auszugebenden String anhängen.


basti_G - Sa 16.05.09 11:14

ja, sowas hab ich mir auch schon gedacht, aber irgendwie komme ich nicht auf den befehl, den ich da noch brauche!


LexXis - Sa 16.05.09 11:17

Du hast ja schon die Laufvariable der for-schleife, sprich: die aktuelle Position. Jetzt mach dich noch über IntToStr schlau, dann dürfte sich der Rest von allein ergeben.


ffgorcky - Sa 16.05.09 12:25

Also wenn ich das Problem jetzt gerade richtig überblicke, dann müsste es doch so gehen:

Delphi-Quelltext
1:
2:
if Zeichenkette[momentanePosition]=gesuchterBuchstabe then
      EditAnWelchenStellen.Text:=EditAnWelchenStellen.Text+IntToStr(momentanePosition)+',';

...vorausgesetzt, Du nutzt die Variable momentanePosition als Schleifen-Variable.


Delete - Sa 16.05.09 14:05

So ähnlich würde ich das auch machen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
AusgabeString := '';
for i := 1 to Length(StringVariable) do
  if StringVariable[i] = Zeichen then
    begin
      if Length(AusgabeString) = 0 then
        AusgabeString := IntToStr(i)
      else
        AusgabeString := AusgabeString + ',' + IntToStr(i);
    end;


basti_G - Sa 16.05.09 14:10

jo, vielen dank jetzt funzt es ... irgendwie stand ich auf dem schlauch, zwecks den string anhängen!

vielen dank nochmal und schönes WE!