Announcement

Collapse
No announcement yet.

char in string und umgekehrt?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • char in string und umgekehrt?

    Hallo,<br>
    wir haben in der Schule eine Aufgabe bekommen, und zwar sollen wir einen string (aus einem TEdit.Text entnommen) in das Morse-Alphabet überführen. Dazu habe ich ein array[1..26] of string, in dem ich die Morse-Zeichen für jeden Buchstaben von 1 bis 26 eingetragen habe. Über for x:=0 to lenght(Edit1.Text) do greife ich auf jeden Buchstaben einzeln zu, welchen ich dann mit der copy-Funktion in eine Variable kopiere. über die Funktion ord(X) erhalte ich dann die Ansi-'Zahl' für den Buchstaben, wobei ord('a') = 97 sein müsste. das Problem ist nun, dass die Funktion copy einen String zurückgibt und die Funktion ord(X) aber einen Char benötigt. <br>
    gibt es da nun eine Möglichkeit diese VariablenTypen in einander zu konvertieren? Oder habt ihr einen besseren Vorschlag diese Aufgabe umzusetzen?<br>
    Ich bin offen für Anregungen... <br>
    Stephan

  • #2
    Hi

    Ich würde es ein bißchen eleganter angehen.

    <pre>

    const
    Morse: array[Char] of String[x];

    </pre>

    Für jedes der 256 möglichen ASCII Zeichen ist in obiger Morse Tabelle ein X Zeichen langer String vorgesehen. Die Länge X hängt nur von der Darstellungsform und der maximalen Länge eines Morsezeichens ab.
    Mit

    <pre>

    function MorseString(const Text: String): String;
    var
    I: Integer;
    begin
    Result := '';
    for I := 1 to Length(Text) do
    Result := Result + Morse[Text[I]] + ' ';
    SetLength(Result, Length(Result) -1);
    end;

    </pre>

    Kann nun sehr einfach ein beliebiger Text String in einen Morse String umgewandelt werden.

    Gruß Hage

    Comment


    • #3
      Die umgekehrte Aufgabe, also Morse in lesbaren Text, dürfte da schon bißchen schwieriger sein. Aber das es DEINE Hausaufgabe ist solltest du schon mal selber drüber nachdenken :

      Comment


      • #4
        Hallo,

        versuche es doch mit
        s := TEdit.Text;
        i := Ord(s[1]);

        Gruß Stephan

        Comment


        • #5
          Na das klappt ja wie am Schnürchen... :=)<br>
          also, danke, hat mir sehr geholfen. Die Idee mit dem array[char] hatte ich auch schon, aber mein Lehrer meinte der Index eines arrays muss numerisch sein. Naja, dem ist wohl nicht so <br>
          Also auf zum nächsten Problem, frei nach dem Motto: 'Auf, auf und auf! Laßt uns von Tonne zu Tonne eilen und dem Müll eine Abfuhr erteilen!' <br>
          Stephan<br>
          <br>
          P.S.: Aus reinem Interesse: Gibt es denn nun trotzdem eine Möglichkeit char in sting und umgekehrt zu konvertieren

          Comment


          • #6
            <pre>
            <code><font size=2 face="Courier New"><font color="#000000"><b>var
            </b>s: <b>string</b>;
            c: Char;
            <b>begin
            </b>s := c;
            c := s[<font color="#0000FF">1</font>]; <font color="#008000"><i>// oder welcher Index auch immer
            </i></font><b>end</b>;
            </font></font>
            </code></pre>
            Uli

            Comment


            • #7
              Wobei man bei Ulrichs Vorschlag aber überprüfen sollte ob length(string)>= dem Idex ist also:
              <pre>
              var
              s: string;
              c: Char;
              begin
              s := c;
              if length(s)>=1 then // oder welcher Index auch immer
              c := s[1]; // oder welcher Index auch immer
              end;

              </pre&gt

              Comment


              • #8
                <i>aber mein Lehrer meinte der Index eines arrays muss numerisch sein</i>

                Schlichtweg falsch.
                <li>1. ein Array Index kann NIEMALS numerisch sein, da Numerisch im allgemeinen die Fließkomma-Darstellung meint als z.B. "1,5", d.h. wenn schon "numersich" dann müsste es "ganzzahlig numerisch heissen".
                <li>2. ein Array Index muß in den meisten Sprachen einem "ordinalen" Typ entsprechen. Ein ordinaler=einfacher Datentyp hängt von der Sprache ab. in den meisten Sprachen kann also ein Array-Index vom
                Typ, Integer,Word,Byte,Boolean,Char und sogar ein Set-bezeichner.
                <li>3. in einigen Sprachen werden sogar Strings aus einem Set als Array Index erlaubt
                <li>4. solche mathematischen Systeme wie Maple oder Mathematica erlauben "arrays" mit Numerischen Argumenten, bzw. jedes beliebigen Datentypes. Allerdings sollte man da nicht von arrays sprechen da es eigentlich Funktionen sind die nur aussehen wie arrays.

                <pre>

                type
                array[Boolean] of<br>
                array[Char] of<br>
                array[word] of<br>
                array[0..3] of<br>

                Farbe = (rot, gruen, blau)<br>
                array[Farbe] of<br>

                </pre>

                Gruß Hage

                Comment


                • #9
                  hallöle<br>
                  @Ulrich und @Frank: dankeschön, ich glaube nun habe ich das Prinzip verstanden.<br>
                  <br>
                  @Hagen: ich denke mal, dass mein lehrer sich zwar bloss auf Delphi bezog, aber selbst das hat sich ja als falsch erwiesen. Nun denn, jetzt bin ich schlauer als vorher und das ist ja der Sinn des ganzen. <br>
                  Also bis demnächst <br>
                  Stepha

                  Comment


                  • #10
                    Hallo,
                    ich würde sagen, der Index eines Arrays muß ordinal sein. Dann klappt's auch mit dem Lehrer.
                    Hier mal ein Auszug aus der Hilfe:
                    Indextyp ist immer ein ordinaler Typ, dessen Bereich 2 GB nicht überschreitet. Da das Array über den Indextyp indiziert wird, ist die Anzahl der Elemente durch den angegebenen Indextyp beschränkt. In der Praxis sind die Indextypen normalerweise Integer-Teilbereiche.

                    Damit kommen wir der Sache schon näher, warum ein Char funktioniert.

                    mfg Klaus-Pete

                    Comment

                    Working...
                    X