Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - copia e concatena stringhe
Forum - C/C++ - copia e concatena stringhe

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:59
Giovedì, 02/08/2012
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 ?


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 12:32
Giovedì, 02/08/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++

  1. char a[]={"exoyezP(x,y,z)"};// stringa
  2.   char tmp[20];// array temporaneo
  3.   memset(tmp,'\0',20);// inizializzo l'array temporaneo
  4.   strncpy(tmp,a,12);// metto in tmp i primi 12 caratteri di a
  5.   strcat(tmp,"f(y)");faccio le concatenazioni
  6.   strcat(tmp,")");


Ultima modifica effettuata da dmr il 02/08/2012 alle 12:36


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 19:01
Giovedì, 02/08/2012
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


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 20:33
Giovedì, 02/08/2012
Grazie :k:
Codice sorgente - presumibilmente C/C++

  1. 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++

  1. char stringa[10];
  2. memset(stringa,'a',2);
  3. stringa[2]='\0';// metto il terminatore di stringa.
  4. 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


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 19:23
Sabato, 04/08/2012
Un altra sfida: se dovessi copiare gli ultimi 5 o 6 elementi della stringa posso usare lo stesso la funzione stncpy ?


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 21:48
Sabato, 04/08/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++

  1. char a[]={"exoyezP(x,y,z)"}; // stringa
  2.   char tmp[20];// array temporaneo dove si memorizzano gli ultimi 6 caratteri di a
  3.   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


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:26
Mercoledì, 08/08/2012
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++

  1. for(i = posizione_tonda;    /*sarebbe la posizione in cui c'è la parentesi tonda aperta*/
  2.        (fnp[i] != '\0');
  3.        i++)
  4.       if((fnp[i] == da_sostituire)    /*da_sostituire sarebbe la variabile che devo sostituire*/
  5.          memset(vettore_temporaneo_uno,'\0',20);
  6.          
  7.          memset(vettore_temporaneo_due,'\0',20);
  8.  
  9.          strncpy(vettore_temporaneo_uno, fnp, i - 1);
  10.          
  11.          strncpy(vettore_temporaneo_due, fnp, i - strlen(fnp));
  12.  
  13.          strcat(vettore_temporaneo_uno, funtore);
  14.  
  15.          strcat(vettore_temporaneo_uno, vettore_temporaneo_due);
  16.  
  17.          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 ?


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:36
Mercoledì, 08/08/2012
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 !!!


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 16:20
Giovedì, 09/08/2012
un aiutino ?


La vita è un biscotto ma se piove si scioglie !!!
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo