PDA

Visualizza la versione completa : [C++] eval ???


ric.cpp
18-04-2005, 17:26
ciao,

esiste che voi sappiate un'implementazione in c++ di una funzione che lavora come la eval() del PHP?

tnx

ric.cpp
18-04-2005, 17:27
...oppure anche in C

dekdek
18-04-2005, 17:28
Difficile. Dovrebbe compilare il codice al volo...

ric.cpp
18-04-2005, 17:31
perch compilare il codice al volo?

io parlo di una funzione che esegue il parsing di una stringa e vi sostituisce tutte le occorrenze di alcune parole con il contenuto di variabili con lo stesso nome... il tutto a tempo di esecuzione

dekdek
18-04-2005, 17:47
Uhm... Io ho cercato su Google per vedere cosa fa eval() e mi e' uscito questo:

http://it.php.net/eval

ric.cpp
18-04-2005, 17:57
data una var stringa $str se $str contiene al suo interno dei nomi di variabili:

$nome='riccardo';
$str = "il mio nome $nome";
eval("\$str = \"$str\";");

il risultato che in $str, dopo la chiamata ad eval, ci sar la stringa 'il mio nome riccardo'

difficile da implementare in c?

dekdek
18-04-2005, 18:14
Uhm, non c'e' mica bisogno della valutazione di un'espressione!

Certo, in Java c'e' l'API per le espressioni regolari e quindi li' si va di lusso.
Cmq ti basta cercare una sottostringa e sostituirla.
O piu' a basso livello, incollare il pezzo prima della sottostringa, il nome da sostituire, e il pezzo dopo la sottostringa.
Sul come... aspetta che ti risponda qualcuno che conosce le librerie del C++
Quando lo usavo io, nel Borland la classe String manco esisteva... :D

plrmntonio
18-04-2005, 20:21
se ho capito tu vuoi che in una stringa ad esempio "str" dopo aver acquisito x esempio la stringa "nome" ci sia in "str" Il mio nome "nome"?

se ho capito bene puoi provare facendo questo:


#include <iostream.h>
#include <string.h>

void main()
{
char str[50];/*la lunghezza stata scelta a caso da me*/
char nome[10];/*uguale come prima*/
strcpy(str,"Il mio nome ");
cout << "dimmi il tuo nome: ";
cin.get(nome,10,'\n');/*si pu utilizzare anche cin >> nome*/
strcat(str,nome);
cout << str;
}



PS al posto del "cout" puoi utilizzare la "printf" ed al posto della "cin.get" o "cin" puoi utilizzare la "scanf"

PPS la funzione "strcat" inserisce il contenuto del secondo parametro in coda al contenuto del primo paramentro
la funzione "strcpy" copia il contenuto del secondo parametro nel primo eliminando il contenuto precendente

PPPS Spero di essere stato chiaro

ric.cpp
19-04-2005, 17:18
PPS la funzione "strcat" inserisce il contenuto del secondo parametro in coda al contenuto del primo paramentro

il programma non dovrebbe operare un accodamento ma una sostituzione. date le stringhe:

stringa1 = "Questa una stringa molto lunga di 1000 byte etc etc ...";

stringa2 = "questa stringa contiene stringa1 al suo interno";

la funzione fa il parsing di stringa2 e quando trova l'occorrenza 'stringa1', poich questa una variabile la sostituisce con il suo contenuto ottenendo:

stringa3 = "questa stringa contiene Questa una stringa molto lunga di 1000 byte etc etc ... al suo interno";

quello che chiedo se esiste un'implementazione di questa funzione in c++

netarrow
19-04-2005, 21:22
Quello che ti serve la cos detta riflessione, ovvero un programma che analizza se stesso a run-time.

Che io sappia solo linguaggi di alto livello come Java o C# possono sfruttarla, linguaggi compilati nativamente no; se poi invece esiste sarebbe molto utile anche a me per implementare la serizlizzazione.

( :yuppi: 900 posts)

:ciauz:

Loading