• 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

Hosting forpsi easy 1 pln
+1 głos
148 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 (246,010 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 (246,010 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ź 355 wizyt
pytanie zadane 16 sierpnia 2016 w C i C++ przez Zeroche Obywatel (1,030 p.)
0 głosów
1 odpowiedź 625 wizyt
pytanie zadane 31 maja 2015 w C i C++ przez Pan Kulomb Pasjonat (18,630 p.)
0 głosów
3 odpowiedzi 1,492 wizyt
pytanie zadane 14 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,083 zapytań

140,741 odpowiedzi

317,701 komentarzy

61,405 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...