Oppure

Loading
02/08/12 9:59
Dice
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 ?
aaa
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è:

  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 :D
aaa
02/08/12 18:33
dmr
Grazie :k:
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]='Grazie :k:

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}';// 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 :k:
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:
  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:

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 !!!
aaa