|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
Funzioni in C
potete darmi qualche aiutino su come sovlgere questo esercizio?
domani leggerò i messaggi grazie in anticipo Si scriva una funzione char*_strncat_(char*s1, const char*s2, int n); tale funzione appende al massimo n caratteri della stringa s2 allafine della stringa s1. In particolare appende a s1 n caratteri di s2 se s2 contiene n caratteri validi, il numero di caratteri validi di s2 altrimenti. Il primo carattere di s2 va a sovrascrivere il carattere '\0' di terminazione della stringa s1. Una volta appesi i caratteri di s2 a s1 si dovra terminare la stringa s1 cosi modificata con un carattere di fine stringa. La funzione strncat restituisce un puntatore alla stringa s1 cosi modificata. Esempio: se s1 è la stringa pippo s2 è la stringa pluto e n vale 20 la funzione restituirà un puntatore a s1 modificata in modo da contenere pippopluto se s1 è la stringa pippo s2 è la stringa pluto e n vale 0 la funzione restituirà un puntatore a s1 modificata in modo da contenere pippo se s1 è la stringa pippo s2 è la stringa pluto e n vale 3 la funzione restituirà un puntatore a s1 modificata in modo da contenere pippoplu |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
se sono allocati dinamicamente gli array di stringhe puoi usare memcpy e subito fai
Codice:
n1=strlen(s1); //metti la lunghezza della prima stringa memcpy((s1+n1),s2,n); //copia a partire dalla fine di s1 n caratteri di s2 *(s1+n1+n)='\0'; return *s1; // io la farei come void cmq.... Codice:
n1=strlen(s1);
for(i=n1;i<n;i++)
s1[i]=s2[i-n1];
s1[i]='\0';
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
ti ringrazio per l'aiuto, li vedrò attentamente da domani e ti farò sapere
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
quindi se l'esercizio mi chiede "si scriva una funzione", in pratica io cosa devo scrivere?
sono giuste quelle due che mi hai scritto qui sopra? cosa dovrei aggiustarci? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
nulla, devi aggiungere solo il prototipo della function...
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
char*_strncat_(char*s1, const char*s2, int n)
{
....
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
char*_strncat_(char*s1, const char*s2, int n)
{ n1=strlen(s1); for(i=n1;i<n;i++) s1[i]=s2[i-n1]; s1[i]='\0'; } è giusta? penso di no cosa c'è che non va? |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
Quote:
|
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
char*_strncat_(char*s1, const char*s2, int n)
{ n1=strlen(s1); for(i=n1;i<n;i++) s1[i]=s2[i-n1]; s1[i]='\0'; } puoi dirmi come si corregge questa? |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
a) Devi calcolare la lunghezza di s1 (con strlen). b) Devi ottenere un puntatore che punta al carattere nullo di s1 (puoi usare s1 stesso come puntatore, aggiungi ad s1 il valore della lunghezza di s1). c) Copi i caratteri da s2 in poi a (s1+n1) in poi fino a quando (1) hai raggiunto il carattere nullo di s2 oppure (2) hai copiato 'n' caratteri. d) Accodi il carattere nullo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
a ma ci servono i puntatori. ancora deve spiegarli la prof.
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
Ti spiego a parole cosa dovrebbe fare la funzione (se scrivo il codice ... lo faccio io l'esercizio ).
a) Devi calcolare la lunghezza di s1 (con strlen). b) Devi ottenere un puntatore che punta al carattere nullo di s1 (puoi usare s1 stesso come puntatore, aggiungi ad s1 il valore della lunghezza di s1). c) Copi i caratteri da s2 in poi a (s1+n1) in poi fino a quando (1) hai raggiunto il carattere nullo di s2 oppure (2) hai copiato 'n' caratteri. d) Accodi il carattere nullo a) come si fa a calcolare la lunghezza di s1, cioè cos'è strlen? |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
lo so, ma ho cominciato oggi a leggere i puntatori, non sono cosi bravo nell'usarli, figuriamoci per fare un esercizio del genere
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
Lasciamolo perdere per un po st'esercizio, voglio cercare di farne prima un'altro che mi sembra piu semplice.
Si scriva una funzione che dato un vettori di interi lo inverta void_inverti_vett_(int vett[], int n); Esempio: se il vettore di interi vett contiene n=7 elementi 1234567 dopo la chiamata della funzione conterrà 7654321 |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Allora: 1) Prendi la lunghezza della stringa s1: int n1 = strlen (s1); 2) Il carattere nullo di s1 si trova in s1[n1]. Da lì in poi dovrai copiare s2. 3) Fai un ciclo for da 0 a < n. Nel blocco del for devi: - Testare se s2[i] è nullo e in tal caso devi uscire dal for con un break. - Copiare il carattere da s2[i] a s1[n1+i] 4) Finito il ciclo metti il nullo in s1[n1+i]
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
ti ringrazio, ma voglio cercare di fare prima l'altro esercizio, sembra piu facile. è cosi?
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
come potrei agire per farlo?
Si scriva una funzione che dato un vettori di interi lo inverta void_inverti_vett_(int vett[], int n); Esempio: se il vettore di interi vett contiene n=7 elementi 1234567 dopo la chiamata della funzione conterrà 7654321 |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
a) Prendi 'n' e lo dividi per 2 (n non lo devi alterare, usa un'altra variabile). Se 'n' vale per esempio 7, ottieni 3 (nota, la divisione è intera). Se il numero è dispari, l'elemento centrale non verrà toccato/spostato (ovvio). b) Fai un ciclo for da 0 a < m. (dove m è n/2). Nel blocco del for devi: - mettere in una variabile temporanea vett[i] - mettere in vett[i] il valore di vett[n-i-1] - mettere in vett[n-i-1] il valore temporaneo
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:09.



















