Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
problemino: è possibile usare le funzione strcpy e strcat per fare questo :
stringa iniziale: exoyezP(x, y, z)
copio solo: "exoyezP(x, y, " in un vettore temporaneo;
al vettore temporaneo concateno la stringa "f(y)";
e poi di seguito concateno soltanto l'ultimo carattere ")" della stringa iniziale
è possibile farlo ?
|
|
dmr (Normal User)
Pro
Messaggi: 141
Iscritto: 04/01/2012
|
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è:
Codice sorgente - presumibilmente C/C++ |
char a[]={"exoyezP(x,y,z)"};// stringa
char tmp[20];// array temporaneo
memset(tmp,'\0',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 il 02/08/2012 alle 12:36 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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
|
|
dmr (Normal User)
Pro
Messaggi: 141
Iscritto: 04/01/2012
|
Grazie
Codice sorgente - presumibilmente C/C++ |
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:
Codice sorgente - presumibilmente C/C++ |
char stringa[10];
memset(stringa,'a',2);
stringa[2]='\0';// 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 \0 Ultima modifica effettuata da dmr il 02/08/2012 alle 20:35 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Un altra sfida: se dovessi copiare gli ultimi 5 o 6 elementi della stringa posso usare lo stesso la funzione stncpy ?
|
|
dmr (Normal User)
Pro
Messaggi: 141
Iscritto: 04/01/2012
|
In questo caso però è meglio utilizzare la funzione strcpy e la funzione strchr per semplicità.
Quindi in questo caso:
Codice sorgente - presumibilmente C/C++ |
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,'\0')-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 il 04/08/2012 alle 21:52 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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:
Codice sorgente - presumibilmente C/C++ |
for(i = posizione_tonda; /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/
(fnp[i] != '\0');
i++)
if((fnp[i] == da_sostituire) /*da_sostituire sarebbe la variabile che devo sostituire*/
memset(vettore_temporaneo_uno,'\0',20);
memset(vettore_temporaneo_due,'\0',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 ?
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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 !!!
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
un aiutino ?
|
|