Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ne, eine direkte "Funktion" wird es wahrscheinlich nicht geben.

Dazu musst Du erstmal einen Parser schreiben, der auf (nimmt man üblicherweise bei Klammerstrukturen) rekursiven Stackaufrufen basiert.

Google mal mit "Klammerausdrücken Stack". Wirst bestimmt fündig :)

Geschrieben

Hallo,

je nach Betriebssystem kann man das auch wesentlich einfacher haben:


#include <stdio.h>
#include <stdlib.h>

#define CMDSIZE 1024

int main()
{
char cmd[CMDSIZE];
char buf[CMDSIZE];
char *arith="10*53+10";
FILE *ptr;

sprintf(cmd,"echo \"%s\"|bc -l", arith);
if ((ptr = popen(cmd, "r")) != NULL) {
if (fgets(buf, CMDSIZE, ptr))
printf("%s", buf);
}
pclose(ptr);
return 0;
}
[/php]

(Quick & Dirty, ohne große Fehlerabfrage, usw). Der arithmetische Ausdruck sollte natürlich der "bc" Syntax entsprechen (abgesehen davon ist mir etwas schleierhaft, was das + "10%" soll? 10% von was?

Nic

Geschrieben
Original geschrieben von nic_power

Hallo,

je nach Betriebssystem kann man das auch wesentlich einfacher haben:


#include <stdio.h>
#include <stdlib.h>

#define CMDSIZE 1024

int main()
{
char cmd[CMDSIZE];
char buf[CMDSIZE];
char *arith="10*53+10";
FILE *ptr;

sprintf(cmd,"echo \"%s\"|bc -l", arith);
if ((ptr = popen(cmd, "r")) != NULL) {
if (fgets(buf, CMDSIZE, ptr))
printf("%s", buf);
}
pclose(ptr);
return 0;
}
[/php]

(Quick & Dirty, ohne große Fehlerabfrage, usw). Der arithmetische Ausdruck sollte natürlich der "bc" Syntax entsprechen (abgesehen davon ist mir etwas schleierhaft, was das + "10%" soll? 10% von was? Nic [/b]

also so funktioniert es auf dem Windows 2000 nicht wirklich

Geschrieben

Ich würde zeichen für zeichen durch das array gehen, wenn das aktuelle zeichen ne zahl ist, zahl merken, und so weiter, bis es mal keine Zahl ist.

Die gemerkte Zahl dann atoi in einen vector<int> stecken.

Das nächste Zeichen ist dann wohl ein Operator, den dann in einen vector<char> merken.

Und wenn du das hast einfach durch den vector<int> laufen und mit dem entsprechenden operator (switch-case) im vector<char> behandeln.

Sollte nicht allzuschwer sein.

Geschrieben

Hallo,

so einfach ist das nicht, Du kannst einen arithmetischen Ausdruck nicht linear von links nach rechts abarbeiten. Das fängt schon bei einfachen Operationen an, da es mathematische Regeln gibt, die eingehalten werden müssen (von anderen Aspekten wie der Klammerung mal ganz abgesehen). Das heisst, Du wirst nicht drum rum kommen, einen vernünftigen Parser (je nach Komplexität der Ausdrücke) zu schreiben. Falls die oben genannten Möglichkeiten nicht in Frage kommen, würde ich dafür auch lex und yacc zurückgreifen. Diese erzeugen aus einer BNF einen passenden Parser (und den Code dazu).

Nic

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...