Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Buchstaben an andere Stelle setzten (https://www.delphipraxis.net/129477-buchstaben-andere-stelle-setzten.html)

Mariaki 19. Feb 2009 20:11


Buchstaben an andere Stelle setzten
 
Hi,
also.. ich möchte in einem String z.B. den 2. Buchstaben (Buchstabe:=Text[2]) an eine andere z.B. die 1. Stelle setzten. Also z.B.:
aus
'Hallo'
'aHllo'
oder die 2. an die 3. stelle:
aus
'Hallo'
'Hlalo'.

Also wie man den Buchstaben herausfindet weiß ich ja, nur wie man ihn dann verschiebt das weiß ich nicht.
Gruß Mariaki

DeddyH 19. Feb 2009 20:12

Re: Buchstaben an andere Stelle setzten
 
Die einfachste Methode dürfte sein: Buchstabe merken, mit Delete löschen und mit Insert an neuer Stelle einfügen.

himitsu 19. Feb 2009 20:17

Re: Buchstaben an andere Stelle setzten
 
oder die beliebte Swap-Funktion :mrgreen:

Delphi-Quellcode:
var s: String;    // s ist der String, z.B. 'Hallo'
  i, i2: Integer; // i und i2 geben den Index der Zeichen an,
                   //   welche getauscht werden sollen

var temp: Char;

c    := s[i];
s[i] := s[i2];
s[i2] := c;

DeddyH 19. Feb 2009 20:22

Re: Buchstaben an andere Stelle setzten
 
Es muss ja nicht unbedingt tauschen sein :mrgreen:

scrat1979 19. Feb 2009 20:25

Re: Buchstaben an andere Stelle setzten
 
Ich würde das ganze über eine allgemeine Funktion lösen:

Delphi-Quellcode:
function Tausche(Wort : String; bs1, bs2 : integer) : String;
VAR TmpChar : Char;

begin
  TmpChar := Wort[bs1];
  Wort[bs1] := Wort[bs2];
  Wort[bs2] := TmpChar;

  result := Wort;
end;

[...]

Edit2.Text := Tausche(Edit1.Text, 2, 5); // Vertauscht z.B. Buchstabe 2 und 5 von Edit1.Text und weist es dem Text von Edit2 zu.
Grüße,
SCRaT

Mariaki 19. Feb 2009 20:26

Re: Buchstaben an andere Stelle setzten
 
also ich wollte nicht tauschen und mit insert und delete habe ich noch nicht gearbeitet. könnte jemand ein kleines code Beispiel schreiben (Bin ein blutiger Anfänger).

mkinzler 19. Feb 2009 20:33

Re: Buchstaben an andere Stelle setzten
 
F1 ist dein Freund

DeddyH 19. Feb 2009 20:35

Re: Buchstaben an andere Stelle setzten
 
Ausnahmsweise:
Delphi-Quellcode:
procedure MoveChar(var s: string; Index1, Index2: Cardinal);
var c: Char;
begin
  if (Index1 > Length(s)) or (Index2 > Length(s)) then
    Exit;
  c := s[Index1];
  Delete(s,Index1,1);
  Insert(c,s,Index2);
end;

himitsu 19. Feb 2009 21:12

Re: Buchstaben an andere Stelle setzten
 
ach stümmt :oops:

OK, dann wenigstens DeddyH's Variante ohne Temp-Variable :angel:
Delphi-Quellcode:
procedure MoveChar(var S: string; Index1, Index2: Cardinal);
begin
  if (Index1 > Length(S)) or (Index2 > Length(S)) then
    Raise Exception.Create('Fehler');
  If Index2 > Index1 Then Inc(Index2);
  Insert(S[Index1], S, Index2);
  Delete(S,Index1, 1);
end;

taaktaak 19. Feb 2009 21:29

Re: Buchstaben an andere Stelle setzten
 
Der Vollständigkeit halber sollte wohl auch auf Index=0 geprüft werden.

Mariaki 21. Feb 2009 11:19

Re: Buchstaben an andere Stelle setzten
 
Das funktioniert i-wie nicht.
Es kommt immer bei
Code:
Delete(S,Index1, 1);
und
Code:
Insert(S[Index1], S, Index2);
der Fehler:
Unit1.pas(39): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden :wall:

Außerdem: Ich habe nur Turbo Delphi und wenn man da in die Hilfe geht bekommt man Hilfe für C#, C++, Java und VB, aber nich für Delphi. Das Ist ein bisschen komisch aber es ist so. :pale:

DeddyH 21. Feb 2009 11:24

Re: Buchstaben an andere Stelle setzten
 
Versuch es mal mit System.Delete und System.Insert.

Mariaki 21. Feb 2009 11:27

Re: Buchstaben an andere Stelle setzten
 
Nee funkt net :?:

nuclearping 21. Feb 2009 11:30

Re: Buchstaben an andere Stelle setzten
 
F1 ist dein Freund.

DeddyH 21. Feb 2009 11:32

Re: Buchstaben an andere Stelle setzten
 
Zeig mal den Aufruf der Prozedur.

Mariaki 21. Feb 2009 11:33

Re: Buchstaben an andere Stelle setzten
 
Zitat:

Zitat von nuclearping
F1 ist dein Freund.

wie obengesagt gibt es bei turbo delphi keine F1 hilfe für delphi sondern nur für C#, C++, Java, und VB

nuclearping 21. Feb 2009 11:34

Re: Buchstaben an andere Stelle setzten
 
Dann ist Google dein Freund. ;)

Wo ist denn der Lerneffekt, wenn du dir alles vorkauen lässt?

DeddyH 21. Feb 2009 11:36

Re: Buchstaben an andere Stelle setzten
 
Versuchst Du so etwas?
Delphi-Quellcode:
MoveChar(Edit1.Text,1,3);
Das geht nicht, das müsstest Du dann so machen:
Delphi-Quellcode:
var s: string;
begin
  s := Edit1.Text;
  MoveChar(s,1,3);
  Edit1.Text := s;

Mariaki 21. Feb 2009 11:48

Re: Buchstaben an andere Stelle setzten
 
Delphi-Quellcode:
Var
 Text:string;
 Buchstabe:Char;
 Stelle1,Stelle2:Cardinal;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Text:=Memo1.Lines.Text;
  Stelle1:=1;
  Stelle2:=3;
  if (Stelle1 > Length(Text)) or (Stelle2 > Length(Text)) then
    Raise Exception.Create('Fehler');
  If Stelle2 > Stelle1 Then Inc(Stelle2);
  Buchstabe:=Text[Stelle1];
  Delete(Text,Stelle1,1);
  Insert(Buchstabe,Text,Stelle2);
  Memo2.Lines.Add(Text);
end;
Das ist der ganze Code. Das mit Stelle:=1 und Stelle2:=3 ist nur Beispielhaft.

DeddyH 21. Feb 2009 11:55

Re: Buchstaben an andere Stelle setzten
 
Benenn Text mal um in z.B. sText.

Mariaki 21. Feb 2009 12:11

Re: Buchstaben an andere Stelle setzten
 
Jo.. Danke. Funktioniert!!!

DP-Maintenance 21. Feb 2009 16:29

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

himitsu 21. Feb 2009 16:39

Re: Buchstaben an andere Stelle setzten
 
das war gerade der falsche Tipp.

Warum sind die Variablen global definiert?

Die gehören in die Prozedur rein. :warn:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Text:string;
  Buchstabe:Char;
  Stelle1,Stelle2:Cardinal;

begin
   ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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