Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

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 :)

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

  • Autor
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

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.