|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#42 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
char *_strncat_(char *s1, const char *s2, in n)
{ int i; int n1 = strlen (s1); for(i=0;i<n;i++) { if(s2[i]==0){ break;} s1[n1+i]=s2[i]; } s1[n1+i]='\0'; return s1; } è sbagliato al 100% sta cosa del nullo, il resto però è giusto? |
|
|
|
|
|
#43 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#44 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
sperando che funzioni ti ringrazio ancora, alla prossima
|
|
|
|
|
|
#45 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#46 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
certo che ce l'ho, ma la funzione senza programma non la posso provare, o no?
|
|
|
|
|
|
#47 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
cioè mica posso scriverci la funzione direttamente e soltanto, che risultato mi darebbe
|
|
|
|
|
|
#48 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Semplice programmino per la prova:
Codice:
#include <stdio.h>
#include <string.h>
char *_strncat_ (char *s1, const char *s2, int n)
{
int i;
int n1 = strlen (s1);
for (i = 0; i < n; i++)
{
if (s2[i] == 0)
break;
s1[n1+i] = s2[i];
}
s1[n1+i] = '\0';
return s1;
}
int main (void)
{
char buf[80];
strcpy (buf, "ciao ");
printf ("[%s]\n", _strncat_ (buf, "prova", 20));
strcpy (buf, "ciao ");
printf ("[%s]\n", _strncat_ (buf, "prova", 3));
return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#49 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
comq quello che mi chiede l'esercizio è solo di scrivere la funzione giusto?
|
|
|
|
|
|
#50 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#51 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
riprendiamo questo semplice programmino
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 i passi da seguire? |
|
|
|
|
|
#52 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#53 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
ma che esercizio è questo?
#include <stdio.h> #include <string.h> char *_strncat_ (char *s1, const char *s2, int n) { int i; int n1 = strlen (s1); for (i = 0; i < n; i++) { if (s2[i] == 0) break; s1[n1+i] = s2[i]; } s1[n1+i] = '\0'; return s1; } int main (void) { char buf[80]; strcpy (buf, "ciao "); printf ("[%s]\n", _strncat_ (buf, "prova", 20)); strcpy (buf, "ciao "); printf ("[%s]\n", _strncat_ (buf, "prova", 3)); return 0; } a me serve di fare questa funzione, cosa c'entra quello che mi hai indicato tu nel post #48? 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 |
|
|
|
|
|
#54 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Cioè ... non ho capito: che cosa ti manca o ti serve ancora??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#55 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
cazzo, c'hai ragione
ho sbagliato esercizio, un attimo che ne metto n'altro |
|
|
|
|
|
#56 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
Si scriva una funzione
int _strcspn_(const char *s1, const char *s2); che determine la lunghezza del prefisso piu lungo di s1 che consista solo di caratteri contenuti in s2. si scriva anche una seconda versione della funzione il cui prototipo sia: int _strcspn_VETT_(char s1[], char s2[]); che svogla esattamente lo stesso compito di strcspn. Obiettivo dell'esercizo nel farvi consegnare due versioni della funzione e di farvi usare due notazioni diverse (con o senza puntatori) per lavorare sulle stringhe. se s1 è la stringa aprtyui ed s2 è la stringa qrty allora il prefisso di s1 contiene caratteri di s2 ha lunghezza 0 (la prima lettera di s1 non compare in s2) |
|
|
|
|
|
#57 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
1) L'esercizio è tutto sommato abbastanza semplice. Segui questo schema: - Metti una variabile che tiene la lunghezza del prefisso da calcolare, es 'lung' inizialmente a 0. - Prendi 1 carattere per volta di s1, andando in avanti, fino al nullo (escluso). - Per ogni carattere di s1, scansioni la stringa s2 per vedere se il carattere vi è contenuto. Se lo trovi, incrementi 'lung' e continui con il prossimo carattere di s1. Ma se non lo trovi, vuol dire che il prefisso è terminato e quindi termini il tutto. - Alla fine fai ritornare 'lung'. 2) Ti è stato chiesto di fare 2 versioni: una con puntatori e una con i vettori. E questo può anche essere ok. Però chi ti ha dato l'esercizio non deve essere un gran genio di "C". Perché dichiarare come parametro char *s1 oppure char s1[] è la stessa identica cosa: alla funzione viene sempre passato comunque un puntatore!!! Quindi accedere alle 2 stringhe s1/s2 tramite l'indicizzazione s1[i] oppure tramite dereferenziazione del puntatore *s1 (o meglio con la formula generica *(s1+i) ) sostanzialmente è la stessa cosa e non c'entra nulla con il fatto di dichiarare il parametro in un modo o nell'altro.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#58 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
- Prendi 1 carattere per volta di s1, andando in avanti, fino al nullo (escluso).
- Per ogni carattere di s1, scansioni la stringa s2 per vedere se il carattere vi è contenuto. Se lo trovi, incrementi 'lung' e continui con il prossimo carattere di s1. Ma se non lo trovi, vuol dire che il prefisso è terminato e quindi termini il tutto. devo usare il for o while. se uso il for però che ci metto dentro? io avevo pensato a una cosa tipo while(s1!='\0') |
|
|
|
|
|
#59 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Dato un char *str: a) Codice:
int i, n = strlen (str);
for (i=0; i<n; i++)
{
... accedi al carattere con str[i] ...
}
Codice:
while (*str != '\0')
{
... accedi al carattere con *str ...
str++;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#60 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
- Per ogni carattere di s1, scansioni la stringa s2 per vedere se il carattere vi è contenuto. Se lo trovi, incrementi 'lung' e continui con il prossimo carattere di s1. Ma se non lo trovi, vuol dire che il prefisso è terminato e quindi termini il tutto.
questo pezzo come si fa int _strcspn_(const char *s1, const char *s1) { lung = 0; int i, n = strlen (str); for (i=0; i<n; i++) { |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:56.



















