Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Buchstaben aus einem String verdoppeln


helmesb04 - Mo 14.12.09 17:53
Titel: Buchstaben aus einem String verdoppeln
Hallo,

ich schreibe morgen eine Informatikklausur und unser Lehrer meinte, das wir folgendes können sollten:

Wenn wir einen Namen eingeben, z.B.: Sandra, dann soll herauskommen: Ssaannddrraa

Aber mir fällt gerade überhaupt nicht ein wie das Funktionieren könnte, ich weiß nur das man was mit length() und copy() machen muss, aber wie man das einsetzt um den Buchstaben immer wieder zu verdoppeln, das weiß ich nicht.

Generell komm ich in den Klausuren, also in der ersten war es so, nicht auf den richtigen Lösungsweg, und nachdem wir die Aufgaben alle besprochen haben im Unterricht, frag ich mich, wieso ich da nicht eher drauf gekommen bin ...


Könnte mir bitte jmd helfen bei diesem Programm?

MfG Helmesb04^^


Niko S. - Mo 14.12.09 18:00

Naja du erstellst ne Stringvariable und gehst step by step alle buchstaben vom edit ab und fügst die jeweils 2 mal in deinen String rein, danach gibst du deinen String im Edit wieder aus.
Das wäre eine Lösung..


helmesb04 - Mo 14.12.09 19:09

Juhu danke, geht doch =)


Niko S. - Mo 14.12.09 19:31

Wenn dir keine Lösung einfällt, mach einfach das, was du auch "per hand" machen würdest.
In dem Fall würdest du dir auch das Wort anschauen, den ersten Buchstaben nehmen, und ihn 2 mal wieder hinschreiben...
Manchmal ist das sehr hilfreich..


ffgorcky - Mo 14.12.09 20:29

Also ich würde das ganze so machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
EditAusgabe.Text:='';
for i:=0 to length(EditMitDemProBuchstabenDreifachAuszugebendenText.Text)-1 do
begin
for j:=1 to 3 do
EditAusgabe.Text:=EditAusgabe.Text+EditAusgabe.Text[i]
end;

Ich hoffe zumindest, dass so klappt - ich kanns ja leider gerade wieder nicht nachprüfen.

Das wären dann doch nur 2 Schleifen ineinander.


ffgorcky - Mo 14.12.09 20:32

Wobei ich das dann schon etwas schwieriger finde, wenn nur das erste S von Sssaaannndddrrraaa groß sein soll...


Marc. - Mo 14.12.09 20:53

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Also ich würde das ganze so machen:

Delphi-Quelltext
1:
2:
EditAusgabe.Text:='';
for i:=0 to length(EditMitDemProBuchstabenDreifachAuszugebendenText.Text)-1 do
[...]

Verdreifachen? Es ging hier ums "Verdoppeln". :angel:

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
EditAusgabe.Text:=EditAusgabe.Text+EditAusgabe.Text                    

Die direkte visuelle Ausgabe ist extrem lahm...

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Das wären dann doch nur 2 Schleifen ineinander.

Es geht auch durchaus mit einer Schleife. ;)


Niko S. - Mo 14.12.09 20:58


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
var
  i: Integer;
  str: String;
begin
  for i := 1 to length(Edit1.Text) do
    str := str+Edit1.Text[i]+Edit1.Text[i];
  Edit1.Text := str;
end;

Das wäre meine Lösung...


Marc. - Mo 14.12.09 21:01

Dann poste ich mal, was ich mir vorhin gedanklich zusammengetippt habe:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function DuplicateChars(const AText: String): String;
var
   CurCharSrc: PChar;
   CurCharRes: PChar;
begin
  SetLength(result, Length(AText) * 2);

  CurCharSrc := PChar(AText);
  CurCharRes := PChar(result);

  while (CurCharSrc^ <> #0do
  begin
    CurCharRes^ := CurCharSrc^;
    (CurCharRes+1)^ := CurCharSrc^;
    Inc(CurCharSrc, 1);
    Inc(CurCharRes, 2);
  end;
end;

Da aber der Fragesteller das Problem wohl mit Copy() und Length() zu lösen hat, ist dieser Source hier völlig redundant. :P


Niko S. - Mo 14.12.09 21:35

Okay jetzt kommt von mir die eine Million Euro Frage...
Welcher Code ist "Besser"?
Deiner scheint mir völlig unnötig kompliziert?
Oder gibt es irgendein Geschwindigkeitsvorteil (Wenn man das jetzt für mehrere Tausend Zeichen machen würde..)?


Marc. - Mo 14.12.09 22:07

user profile iconNiko S. hat folgendes geschrieben Zum zitierten Posting springen:
Okay jetzt kommt von mir die eine Million Euro Frage...
Welcher Code ist "Besser"?
Deiner scheint mir völlig unnötig kompliziert?

Kompliziert auf dem ersten Blick, da gebe ich Dir recht.
user profile iconNiko S. hat folgendes geschrieben Zum zitierten Posting springen:
Oder gibt es irgendein Geschwindigkeitsvorteil (Wenn man das jetzt für mehrere Tausend Zeichen machen würde..)?

Wenn Du Deine Variante noch etwas optimierst (Zugriff auf Str-Variable, statt Text[i]), dann ist der Unterschied in der Tat unerheblich. (getestet) :)
Ich habe aber auch nie behauptet, dass meine Variante die "bessere" sei. Mir schwebte dieser Code vorhin einfach nur im Kopf herum und war der Meinung, dass er hier im Forum vielleicht besser aufgehoben wäre. ;)