Ankündigung

Einklappen
Keine Ankündigung bisher.

Zahlen vor und nach einem bestimmten Zeichen erhalten, begrenzt von Leerzeichen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zahlen vor und nach einem bestimmten Zeichen erhalten, begrenzt von Leerzeichen

    Huhu,

    ich beschäftige mich seit ca. zwei Wochen mit PHP, und würde nun gerne so eine Art Taschenrechner programmieren. Das erste Ziel, das ich mir gesteckt habe ist, simple arithmetische Berechnungen durchzuführen, inklusive Potenzen.
    Im Klartext: Der Benutzer gibt z.B. in ein Textfeld ein:

    9*5-6*3/4+67+4-2/3

    und erhält das Ergebnis. Alles soweit kein Problem, ich setze das ganze mit eval() um. Nun möchte ich allerdings die Möglichkeit bieten, Potenzen einzugeben, mittels des ^-Zeichens. 6^3 entspricht also pow(6, 3).

    Meine Frage ist nun, wie ich am besten die Zahl vor (die Basis) dem Zeichen und die Zahl nach (der Exponent) dem Zeichen erhalte. Sollte nicht so schwer zu lösen sein, mittels strpos() +/- 1. Das liefert mir aber nur die einzige Ziffer vor/nach dem ^-Zeichen.

    Wie kann ich alle Zeichen vor/nach dem ^-Zeichen auslesen, die von einem anderen Rechenzeichen (+, -, *, /, (, )) oder einem Leerzeichen begrenzt werden? Aus 36^34 soll also pow(36, 34) und nicht pow(6, 3) werden.

    Gruß,

    Pumi

  • #2
    Diese Frage hatten wir gerade erst. Inklusive Kritik an eval usw. Bitte benutze die Forensuche.

    Kommentar


    • #3
      Hallo und willkommen im Forum,

      was eine möglichkeit wäre ist : Die Zahlen vor dem ^ und nach dem Zeichen in temporäre Variablen zu schreiben und diese dann mit pow auszuwerten oder man macht es mit Substr()

      Kommentar


      • #4
        In einer Gleichung kann aber auch 2^3^4 stehen oder 3^(8-2). Mathematische Formeln können nunmal beliebig komplex sein. Da reicht Suchen und Ersetzen schlicht nicht aus.

        Kommentar


        • #5
          Indem du guckst, wo das nächste Leer- oder Rechenzeichen ist. Oder indem du dich mit regulären Ausdrücken auseinandersetzt.
          Das größte Problem an deinem Taschenrechner ist aber, dass dank eval() auch jede andere Eingabe möglich ist. D.h. es lässt sich jeder beliebige PHP-code eingeschleusen. Solange das Ganze nur eine Fingerübung für dich ist, ist das kein Problem, aber das Skript darfst du auf keinem Fall auf einem öffentlichen Server hosten.
          Am besten beschäftigst du dich aber gleich von Anfang an mit sicherer Programmierung. Das klingt vielleicht etwas unfair, weil du ja gerade erst begonnen hast, aber je früher du damit anfängst, desto besser.
          Ressourcen gibt es dazu eigentlich genug im Netz.

          Beitrag editiert:
          […] Viiel zu langsam.

          Kommentar


          • #6
            Zitat von Manko10 Beitrag anzeigen
            Indem du guckst, wo das nächste Leer- oder Rechenzeichen ist. Oder indem du dich mit regulären Ausdrücken auseinandersetzt.
            Das größte Problem an deinem Taschenrechner ist aber, dass dank eval() auch jede andere Eingabe möglich ist. D.h. es lässt sich jeder beliebige PHP-code eingeschleusen. Solange das Ganze nur eine Fingerübung für dich ist, ist das kein Problem, aber das Skript darfst du auf keinem Fall auf einem öffentlichen Server hosten.
            Am besten beschäftigst du dich aber gleich von Anfang an mit sicherer Programmierung. Das klingt vielleicht etwas unfair, weil du ja gerade erst begonnen hast, aber je früher du damit anfängst, desto besser.
            Ressourcen gibt es dazu eigentlich genug im Netz.

            Beitrag editiert:
            […] Viiel zu langsam.
            Ich weiss, worauf du hinauswillst und verstehe dich insofern auch. Aber es handelt sich, wie du bereits sagtest, nur um eine kleine Fingerübung
            Ich könnte jetzt natürlich auch hingehen und alles rausschleusen, was keine Zahlen oder eine begrenzte Zahl an Rechenzeichen enthält, aber das wäre vorerst zuviel des guten

            Zum ersten Teil: Ich weiss, und genau da ist mein Problem, ich weiss nicht so recht wie ich das bewerkstelligen kann

            Zitat von nikosch Beitrag anzeigen
            In einer Gleichung kann aber auch 2^3^4 stehen oder 3^(8-2). Mathematische Formeln können nunmal beliebig komplex sein. Da reicht Suchen und Ersetzen schlicht nicht aus.
            Da hast du natürlich Recht. Ich denke, bei der Sache hier können wir uns aber auf simple Sachen beschränken, also dass aus 6^4-5 nicht 6^-1 sondern (6^4)-5 wird.

            Kommentar


            • #7
              Wenn du schon eval() nimmst, was spricht dann dagegen, einfach gleich pow() einzugeben? Dann klappt's auch mit der Verschachtelung und du verbaust dir nicht die Möglichkeit, den XOR-Bit-Operator ^ zu nutzen.

              Kommentar

              Lädt...
              X