Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wortkette drehen


basti_G - Do 14.05.09 21:41
Titel: Wortkette drehen
hallo liebe delphifreunde,

ich hab hier eine aufgabe bei der ich einfach nicht auf einen grünen zweig komme!

ich habe ein Memofeld gegeben, in dem ich mehrere zeilen text eingebe z.b.:

in der 1. zeile: Anna hetzt Hanna
in der 2. zeile: John rennt schnell
in der 3. zeile: Bernd ist cool

dann habe ich ein editfeld, in dem ich die nummer der zeile eingeben soll, die bearbeitet werden soll z.b.: die 2.zeile

--> dann habe ich einen button "vertausche Zeichen"

wenn ich also nun auf den button klicke soll die wortkette in der ausgewählte

zeile umgedreht werden, bei zeile2 also: llenhcs tnner nhoJ

könnt ihr mir nun sagen, welchen befehl ich dazu nutzen muss bzw. wie die schleife(n) aussehen muss?
wäre euch extrem dankbar, wenn ihr mir helfen könnt!

mfg basti


Boldar - Do 14.05.09 21:45


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1click (sender: Tobject);
var str, str2: string;
begin
str := memo1.lines[strtointdef(edit1.text, 1)-1];
for i := length(str) downto 0 do
begin
str2 := str2 + str[i];
end;
memo1.lines[strtointdef(edit1.text, 1)-1]:= str;
end;


Ungetestet, ich weiss grad nicht ob Tmemo.lines eventuell readonly ist...


basti_G - Do 14.05.09 21:48

oh man, das ging aber fix ... werds gleich mal testen und meld mich dann nochmal!

aber vielen vielen dank schon mal!


Narses - Do 14.05.09 22:27

Moin!

@user profile iconBoldar: Hey, super! :D Machst du auch meine Hausaufgaben? :zustimm:

cu :roll:
Narses


basti_G - Do 14.05.09 23:32

hausaufgaben trifft es nicht ganz ;) ...

so ganz funzt es noch nicht, werd mich am WE aber mal in ruhe hinsetzen und bisschen basteln, dank dem super ansatz!

jute nacht!


Mordilion - Fr 15.05.09 08:22

Als kleiner Tipp noch, schau dir mal die Funktion "ReverseString" aus der StrUtils.pas an. Die macht genau das was du brauchst.


Gruß
Mordi


basti_G - Fr 15.05.09 19:25

hab es jetzt wie folgt gelöst und funktioniert einwandfrei!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button2Click(Sender: TObject);

var  zk : string;        //Inhalt Memofeld
     Z : Integer;       //Z - Zahl in Edit1
      i:integer;
     zk2: string;

begin
      Z:=strtoint (Edit1.text);              //auslesen der einzelnen Zeilen
      zk:=Memo1.Lines[Z];
  for i :=length(zk) downto 1 do
begin
zk2:= zk2+copy(zk,i,1);

end;
 memo1.Lines[z] := zk2;

end;

schönes WE und vielen dank für eure hilfe!

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Regan - Fr 15.05.09 20:08

Ein Nachtrag von mir:

Um den Vorschlag von user profile iconMordilion zu verwenden und etwas Fehlerbehebung zu betreiben, kann man den Quelltext auf drei Zeilen und einer Variable verkürzen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button2Click(Sender: TObject);
var
  z: Integer;
begin
  if not (TryStrToInt(Edit1.Text,z)) then exit; //Fehlerbehandlung bei flascher Editeingabe
  if (z < 0or (z > Memo1.Lines.Count-1then exit;  //Liegt nicht im Bereich
  Memo1.Lines.Strings[z] := ReverseString(Memo1.Lines.Strings[z]); //Zuweisen
end;

So halbiert man auch die Codelänge :wink: .


basti_G - Fr 15.05.09 22:46

auch sehr schön und vor allem kürzer ... vielen dank noch mal an euch!