Delphi: Text im Memofeld umdrehen?

  • Hi Freax,
    kann hier überhaupt wer Delphi? :D
    Ich poste trotzdem mal mein Problem:


    Ich möchte gerne einen Text, der in ein Memofeld eingetippt wurde auf Buttondruck rückwärts im gleichen Memofeld darstellen.


    Ich habe nur keine Ahnung wie man das machen könnte.
    Chars zählen, und per Schleife umdrehen? Aber wie?


    Hoffe es kann jemand helfen.
    -SF³

  • Hi,
    ich kann kein Delphi, aber es gibt ein paar (mehr oder weniger "schoene") Ansaetze:


    1. Wenn Du nur eine simple Ausgabe brauchst (C-aehnliche Notation):
    int i;
    for (i = strlen(str)-1; i >= 0; i--)
    printf ("%c", str[i]);


    2. Wenn Du "Kewl" sein willst und Rekursion verwenden willst (diese Loesung war eine der ersten Programmieraufgabe im ersten Semester Infostudium), dies habe ich aus dem Stegreif/Gedaechtnis in einer eher Pascal-aehnlichen Notation getippt, kann also keinerlei Gewaehr fuer syntaktische Korrektheit geben:


    string function reverse (string)
    begin
    if length(string) = 1 then
    reverse = string
    else if length(string) = 2 then
    reverse = string[2] + string[1]
    else
    reverse = reverse(sub(string,2)) + string[1];
    end;


    (Im Gegensatz zu den anderen Beispielen faengt Pascal in Strings mit 1 zu zaehlen an).


    3. Wenn Du Vertauschung benutzen willst (das Implementieren der entsprechenden Funktion erspare ich mir mal) (wieder C-aehnliche Notation):


    for (i = 0; i < strlen(str) / 2; i++) {
    swap(str[i],str[strlen(str)-1-i]);
    }



    PS@SF: ich implementier Dir eine Loesung fuer ein Problem Deiner Wahl mit einer Laenge bis zu 50 ("normale") Zeilen (in C/C++ oder PHP), wenn Du mir die folgenden Fragen beantwortest:
    a) warum funktioniert Loesung 3 auch bei ungeraden Stringlaengen (leicht ich weiss :) )
    b) wie wuerdest Du eine swap-funktion implementieren, die *KEINE* Hilfsvariable benoetigt?


    Bei beiden Fragen findest Du mit google Loesungen, dann schreib die Quellenangabe dazu und *WARUM*GENAU* die Loesung zu b) funktioniert.


    cu
    XlF

  • in VB würde ich es (quick&dirty) so machen:


    Dim neuText As String
    Dim x As Integer
    neuText = ""
    For x = 0 To Len(Text1.Text) - 1
    neuText = neuText & Mid$(Text1.Text, Len(Text1.Text) - x, 1)
    Next x
    Text1.Text = neuText


    Das dreht den Text in der Textbox Text1 um. Geht sicher eleganter, aber es geht auch so. Müsste in Delphi sehr ähnlich aussehen, nur gibts da ja keine Mid$ Funktion. Das müsste man dann durch ein Copy (heisst das so?) ersetzen.


    d@niel

  • Zu guter letzt in Delphi:


    var
    Quelle, Ziel: string;
    begin
    Quelle := Memo1.Text;
    Ziel := '';
    for i := Length(Quelle) downto 1 do
    Ziel := Ziel + Quelle[i];
    Memo1.Lines.Add(Ziel);
    end;


    Pascal ist doch sooo viel eleganter, nicht? ;-)


    Frank

  • Supi, danke :)


    Jetz steh ich noch vor dem Problem, dass der Text auf dem Button von "Umdrehen!" in "!neherdmU" geändert werden soll. Eigentlich trivial.... :rolleyes:


    IF button1.caption := 'Umdrehen!' Then button1.caption :='!neherdmU';
    IF button1.caption := '!neherdmU' Then button1.caption :='!neherdmU';


    mag er jedenfalls nicht. "Ausdruckstyp muss Boolean sein" sagt er.
    Wer hat einen IQ von über 30 und kann mir helfen? :D


    -SF³

  • Zitat

    Original geschrieben von SiemensFreak³
    "Ausdruckstyp muss Boolean sein" sagt er.

    Hab mit Pascal und Delphi schon lang nichsts mehr gemacht, aber könnte heissen das du ein boolsches Gleich ( = ) statt einem mathematischen Gleich ( := ) verwenden musst.


    Also:


    IF button1.caption = 'Umdrehen!' Then button1.caption := '!neherdmU';
    IF button1.caption = '!neherdmU' Then button1.caption := '!neherdmU';

  • XlF42 Ich glaub', der SF hat seine Lösung schon, daher beantworte ich mal Deine Fragen...


    a) trivial


    b) Beispiel in C:


    void swap ( int *a, int *b )
    {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    }


    ohne Google oder sonstige Literaturquelle ;-)

    History: Motorola e930, t720, RAZR V3, MOTORAZR maxx V6, MOTOROKR Z6, MOTOROKR E8, MOTOZINE ZN5, Samsung S8000 Jet

  • Hi,
    naja... Du bist auch Informatiker, da wuerde ich mal voraussetzen, dass Dir die Antworten bekannt sind.


    Zitat

    Original geschrieben von Michael P.
      XlF42 Ich glaub', der SF hat seine Lösung schon, daher beantworte ich mal Deine Fragen...


    a) trivial


    wie ich diesen spruch an der Uni hassen gelernt habe, aber Du hast natuerlich recht :) .



    wie schon gesagt, fuer jemanden mit entsprechender Erfahrung (zB durch Studium oder Arbeit als Softie) ist sowas "Tagesgeschaeft".


    Hast Du auch in Muenchen studiert? (nur aus Neugierde)


    cu
    XlF

  • Zitat

    Original geschrieben von Martyn
    Hab mit Pascal und Delphi schon lang nichsts mehr gemacht, aber könnte heissen das du ein boolsches Gleich ( = ) statt einem mathematischen Gleich ( := ) verwenden musst.


    So ist es!


    Frank

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!