• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Interpretowanie/rzutowanie/konwersja typu string/char[] jako fragmentu kodu

Object Storage Arubacloud
+1 głos
155 wizyt
pytanie zadane 4 marca 2021 w C i C++ przez jkm9182 Nowicjusz (220 p.)
edycja 4 marca 2021 przez jkm9182

Czy istnieje taki mechanizm, który pozwala zinterpretować niepusty typ string lub tablicę char jako fragment kodu? Nie wiem, czy dobrze ująłem pytanie, dlatego spróbuję przedstawić problem na przykładzie.
Rozważmy poniższy kod:

#include <iostream>
using namespace std;
int main()
{
    string x="36+4-5/5";
    cout<<x<<endl;
}

Wówczas 

cout<<x<<endl;

działa tak samo jak 

cout<<"36+4-5/5"<<endl;

Na ekran zostanie zwrócony 36+4-5/5.

Chodzi mi o to, żeby zamiast tego, co jest wyżej, było tak (bez cudzysłowów): 

cout<<36+4-5/5<<endl;

Co powinno zwrócić na ekran 39. Wykonane zostało działanie matematyczne.

Dochodząc do sedna:

#include <iostream>
using namespace std;
int main()
{
    string x="36+4-5/5";
    cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;
}

Ma zwrócić 39

Czyli:

cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;

Ma działać jak (bez cudzysłowów):

cout<<36+4-5/5<<endl;

Więc:

Żadna ze znanych mi funkcji konwertujących (istringstream, strtol, atoi, sscanf) nie działa prawidłowo dla rozbudowanych formuł. Jednakże nie chodzi tylko o interpretację samych liczb i operatorów, bowiem chcę, aby to również działało dla zmiennych czy poza otoczeniem cout działały fragmenty kodu, które zawierają, np. instrukcję warunkową. Przykładowo: 

#include <iostream>
using namespace std;
int main()
{
    int a=2, b=3;
    string x="3*a+4+b-15/(b*5)";
    cout<<funkcja_przekształcająca_string_na_fragment_kodu(x)<<endl;
}

I to zwróci 12, nie 3*a+4+b-15/(b*5).

Lub:

#include <iostream>
using namespace std;
int main()
{
    int a=2;
    string x="if(a>3) cout<<0; else cout<<1;";
    funkcja_przekształcająca_string_na_fragment_kodu(x);
}

Zwróci 1.

1 odpowiedź

0 głosów
odpowiedź 4 marca 2021 przez VBService Ekspert (253,420 p.)
wybrane 5 marca 2021 przez jkm9182
 
Najlepsza

Is there C/C++ equivalent of eval(“function(arg1, arg2)”)? 

IExpressionEval::Eval Method [C++]

eval [C++]  wink

 

In some programming languageseval , short for the English evaluate, is a function which evaluates a string as though it were an expression and returns a result; in others, it executes multiple lines of code

 

 

 

P.S. BTW Is there an eval function In C#?

komentarz 4 marca 2021 przez VBService Ekspert (253,420 p.)

Ten kto dał downvote, może podać lepszy sposób zamiany zawartości string-a na kod wykonywalny. Chętnie sam zobaczę coś lepszego (innego).

Podobne pytania

0 głosów
1 odpowiedź 370 wizyt
pytanie zadane 16 sierpnia 2016 w C i C++ przez Zeroche Obywatel (1,030 p.)
0 głosów
1 odpowiedź 708 wizyt
pytanie zadane 31 maja 2015 w C i C++ przez Pan Kulomb Pasjonat (18,630 p.)
0 głosów
3 odpowiedzi 1,638 wizyt
pytanie zadane 14 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...