02/08/12 10:32
dmr
Si è possibile farlo usando le funzioni strncpy ed strcat.
Usi strncpy per copiare n caratteri nell' array temporaneo, poi usi strcat per concatenare la nuova parte della stringa cioè:
Usi strncpy per copiare n caratteri nell' array temporaneo, poi usi strcat per concatenare la nuova parte della stringa cioè:
char a[]={"exoyezP(x,y,z)"};// stringa char tmp[20];// array temporaneo memset(tmp,'Si è possibile farlo usando le funzioni strncpy ed strcat.
Usi strncpy per copiare n caratteri nell' array temporaneo, poi usi strcat per concatenare la nuova parte della stringa cioè:
char a[]={"exoyezP(x,y,z)"};// stringa char tmp[20];// array temporaneo memset(tmp,'{parsed_message}',20);// inizializzo l'array temporaneo strncpy(tmp,a,12);// metto in tmp i primi 12 caratteri di a strcat(tmp,"f(y)");faccio le concatenazioni strcat(tmp,")");',20);// inizializzo l'array temporaneo strncpy(tmp,a,12);// metto in tmp i primi 12 caratteri di a strcat(tmp,"f(y)");faccio le concatenazioni strcat(tmp,")");
Ultima modifica effettuata da dmr 02/08/12 10:36
aaa
02/08/12 17:01
Dice
apperò apperò apperò
complimentoni
ho soltanto un piccolo dubbio: non avevo mai visto la funzione memset; mi spiegheresti meglio cosa fa ?
Ancora una volta... grazie infinite
complimentoni
ho soltanto un piccolo dubbio: non avevo mai visto la funzione memset; mi spiegheresti meglio cosa fa ?
Ancora una volta... grazie infinite
aaa
02/08/12 18:33
dmr
Grazie
La funzione riempie la zona puntata da str n volte con il carattere c.
Per esempio:
Io la avevo utilizzata solo per inizializzare l'array con il carattere Grazie
La funzione riempie la zona puntata da str n volte con il carattere c.
Per esempio:
Io la avevo utilizzata solo per inizializzare l'array con il carattere {parsed_message}
void *memset(void *str,int c,size_t n);
La funzione riempie la zona puntata da str n volte con il carattere c.
Per esempio:
char stringa[10]; memset(stringa,'a',2); stringa[2]='Grazievoid *memset(void *str,int c,size_t n);
La funzione riempie la zona puntata da str n volte con il carattere c.
Per esempio:char stringa[10]; memset(stringa,'a',2); stringa[2]='{parsed_message}';// metto il terminatore di stringa. printf("%s\n",stringa);// l'output è aa perchè memset ha riempito la zona puntata da str con 2 a
Io la avevo utilizzata solo per inizializzare l'array con il carattere {parsed_message}';// metto il terminatore di stringa. printf("%s\n",stringa);// l'output è aa perchè memset ha riempito la zona puntata da str con 2 a
Io la avevo utilizzata solo per inizializzare l'array con il carattere Grazie
void *memset(void *str,int c,size_t n);
La funzione riempie la zona puntata da str n volte con il carattere c.
Per esempio:
char stringa[10]; memset(stringa,'a',2); stringa[2]='{parsed_message}';// metto il terminatore di stringa. printf("%s\n",stringa);// l'output è aa perchè memset ha riempito la zona puntata da str con 2 a
Io la avevo utilizzata solo per inizializzare l'array con il carattere {parsed_message}
Ultima modifica effettuata da dmr 02/08/12 18:35
aaa
04/08/12 17:23
Dice
Un altra sfida: se dovessi copiare gli ultimi 5 o 6 elementi della stringa posso usare lo stesso la funzione stncpy ?
aaa
04/08/12 19:48
dmr
In questo caso però è meglio utilizzare la funzione strcpy e la funzione strchr per semplicità.
Quindi in questo caso:
Ho usato strchr in modo da restituire l'indirizzo di memoria del terminatore di stringa-6, in modo che strcpy inizi a copiare dal carattere carattere in questo caso x. Ricorda però che se la stringa non è sufficientemente lunga e usi questo metodo avrai un segmentation fault.
Se ho spiegato male dimmi pure.
Quindi in questo caso:
char a[]={"exoyezP(x,y,z)"}; // stringa char tmp[20];// array temporaneo dove si memorizzano gli ultimi 6 caratteri di a strcpy(tmp,strchr(a,'In questo caso però è meglio utilizzare la funzione strcpy e la funzione strchr per semplicità.
Quindi in questo caso:char a[]={"exoyezP(x,y,z)"}; // stringa char tmp[20];// array temporaneo dove si memorizzano gli ultimi 6 caratteri di a strcpy(tmp,strchr(a,'{parsed_message}')-6);// copio gli ultimi 6 caratteri
Ho usato strchr in modo da restituire l'indirizzo di memoria del terminatore di stringa-6, in modo che strcpy inizi a copiare dal carattere carattere in questo caso x. Ricorda però che se la stringa non è sufficientemente lunga e usi questo metodo avrai un segmentation fault.
Se ho spiegato male dimmi pure.')-6);// copio gli ultimi 6 caratteri
Ho usato strchr in modo da restituire l'indirizzo di memoria del terminatore di stringa-6, in modo che strcpy inizi a copiare dal carattere carattere in questo caso x. Ricorda però che se la stringa non è sufficientemente lunga e usi questo metodo avrai un segmentation fault.
Se ho spiegato male dimmi pure.
Ultima modifica effettuata da dmr 04/08/12 19:52
aaa
08/08/12 9:26
Dice
Oilà, allora... ho fatto più o meno come mi hai detto e...
diciamo che viene soltanto in parte, perchè non mi funziona come dovrebbe.
Ti faccio vedere come ho scritto io:
Pensavo di aver fatto per bene, ma invece no, perchè alla fine mi stampa (nella parte tra le parentesi):
(z, a, yf(y)
Dove ho sbagliato ?
diciamo che viene soltanto in parte, perchè non mi funziona come dovrebbe.
Ti faccio vedere come ho scritto io:
for(i = posizione_tonda; /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/ (fnp[i] != 'Oilà, allora... ho fatto più o meno come mi hai detto e...
diciamo che viene soltanto in parte, perchè non mi funziona come dovrebbe.
Ti faccio vedere come ho scritto io:
for(i = posizione_tonda; /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/ (fnp[i] != '{parsed_message}'); i++) if((fnp[i] == da_sostituire) /*da_sostituire sarebbe la variabile che devo sostituire*/ memset(vettore_temporaneo_uno,'{parsed_message}',20); memset(vettore_temporaneo_due,'{parsed_message}',20); strncpy(vettore_temporaneo_uno, fnp, i - 1); strncpy(vettore_temporaneo_due, fnp, i - strlen(fnp)); strcat(vettore_temporaneo_uno, funtore); strcat(vettore_temporaneo_uno, vettore_temporaneo_due); strcpy(fnp, vettore_temporaneo_uno);
Pensavo di aver fatto per bene, ma invece no, perchè alla fine mi stampa (nella parte tra le parentesi):
(z, a, yf(y)
Dove ho sbagliato ?'); i++) if((fnp[i] == da_sostituire) /*da_sostituire sarebbe la variabile che devo sostituire*/ memset(vettore_temporaneo_uno,'Oilà, allora... ho fatto più o meno come mi hai detto e...
diciamo che viene soltanto in parte, perchè non mi funziona come dovrebbe.
Ti faccio vedere come ho scritto io:
for(i = posizione_tonda; /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/ (fnp[i] != '{parsed_message}'); i++) if((fnp[i] == da_sostituire) /*da_sostituire sarebbe la variabile che devo sostituire*/ memset(vettore_temporaneo_uno,'{parsed_message}',20); memset(vettore_temporaneo_due,'{parsed_message}',20); strncpy(vettore_temporaneo_uno, fnp, i - 1); strncpy(vettore_temporaneo_due, fnp, i - strlen(fnp)); strcat(vettore_temporaneo_uno, funtore); strcat(vettore_temporaneo_uno, vettore_temporaneo_due); strcpy(fnp, vettore_temporaneo_uno);
Pensavo di aver fatto per bene, ma invece no, perchè alla fine mi stampa (nella parte tra le parentesi):
(z, a, yf(y)
Dove ho sbagliato ?',20); memset(vettore_temporaneo_due,'Oilà, allora... ho fatto più o meno come mi hai detto e...
diciamo che viene soltanto in parte, perchè non mi funziona come dovrebbe.
Ti faccio vedere come ho scritto io:
for(i = posizione_tonda; /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/ (fnp[i] != '{parsed_message}'); i++) if((fnp[i] == da_sostituire) /*da_sostituire sarebbe la variabile che devo sostituire*/ memset(vettore_temporaneo_uno,'{parsed_message}',20); memset(vettore_temporaneo_due,'{parsed_message}',20); strncpy(vettore_temporaneo_uno, fnp, i - 1); strncpy(vettore_temporaneo_due, fnp, i - strlen(fnp)); strcat(vettore_temporaneo_uno, funtore); strcat(vettore_temporaneo_uno, vettore_temporaneo_due); strcpy(fnp, vettore_temporaneo_uno);
Pensavo di aver fatto per bene, ma invece no, perchè alla fine mi stampa (nella parte tra le parentesi):
(z, a, yf(y)
Dove ho sbagliato ?',20); strncpy(vettore_temporaneo_uno, fnp, i - 1); strncpy(vettore_temporaneo_due, fnp, i - strlen(fnp)); strcat(vettore_temporaneo_uno, funtore); strcat(vettore_temporaneo_uno, vettore_temporaneo_due); strcpy(fnp, vettore_temporaneo_uno);
Pensavo di aver fatto per bene, ma invece no, perchè alla fine mi stampa (nella parte tra le parentesi):
(z, a, yf(y)
Dove ho sbagliato ?
aaa
08/08/12 9:36
Dice
Aspetta, ho sbagliato a dirti il risultato che mi da.
Mi stampa questo (riporto solo la parte tra parentesi tonde):
(a, y, zf(y) sapendo che il carattere che mi deve sostituire è la z
Poi mi sono accorto di un altra cosa: se sposto la zeta, mi stampa questo:
(z, a, yf(y)
UN SUPER BOOOOHHHH IO LO METTEREI, VOI CHE DITE
AHAHAHAHAHAH
vi prego heeeeellppp !!!
Mi stampa questo (riporto solo la parte tra parentesi tonde):
(a, y, zf(y) sapendo che il carattere che mi deve sostituire è la z
Poi mi sono accorto di un altra cosa: se sposto la zeta, mi stampa questo:
(z, a, yf(y)
UN SUPER BOOOOHHHH IO LO METTEREI, VOI CHE DITE
AHAHAHAHAHAH
vi prego heeeeellppp !!!
aaa