char *DelChar(const char *str, char d) { long i, j, ndc; for (ndc = 0, i = 0 ; str[i] != '\0' ; i++) //Calcola il numero di caratteri if (str[i] == del) ndc++; //da eliminare. //Alloca lo spazio di memoria strettamente necessario per la nuova stringa char *newStr = malloc((strlen(str) - ndc + 1)*sizeof(char)); for (j = 0, i = 0 ; string[i] != '\0' ; i++) //Copia i caratteri diversi da d if (str[i] != d) newStr[j++] = str[i]; //nella nuova stringa. newStr[j] = '\0'; return newStr; }
void Inverti(int V[], int n) { int i = 0, j = n - 1; //L'indice i procede dall'inizio verso la fine del while (i < j) { //vettore e l'indice j dalla fine verso l'inizio. int c = V[i]; //Scambia V[i] e V[j] V[i] = V[j]; V[j] = c; i++; j--; } }
p 1 e 1 n 2 i 0 o 0
/* Funzione ausiliaria che ritorna il numero di occorrenze del carattere c nei primi n caratteri di s. */ long CountOcc(const char *s, long n, char c) { long k, nOcc = 0; for (k = 0 ; k < n ; k++) if (s[k] == c) nOcc++; return nOcc; } void PrintNumOcc(const char *str1, const char *str2) { long k, len2 = strlen(str2); for (k = 0 ; str1[k] != '\0' ; k++) { //Per ogni carattere c di str1... char c = str1[k]; if (CountOcc(str1, k, c) == 0) //Se e' la prima occorrenza di c in str1, printf("%c %ld\n", c, CountOcc(str2, len2, c)); //stampa il numero di volte } //che c occorre in str2. }
typedef struct SList { char str[30]; struct SList *next; } SList;Il prototipo della funzione è void Ripulisci(SList *). La memoria degli elementi eliminati deve essere rilasciata.
void Ripulisci(SList *L) { if (L != NULL && L->next != NULL) { SList *e = L; do { if (strcmp(e->str, e->next->str) == 0) { //Se le stringhe sono uguali SList *p = e->next; //elimina il prossimo elemento. e->next = p->next; free(p); } else e = e->next; } while (e->next != NULL); } }
typedef struct ENum { float n; struct ENum *next; } ENum;Il prototipo della funzione è float *Massimi(const ENum *L, long *dim). In *dim restituisce la dimensione del vettore ritornato (che deve essere allocato dinamicamente). Il vettore non deve essere sovradimensionato. Ad esempio se la lista è 12 -> 3 -> 7 -> 4 -> 3 -> 2 -> 5 -> 1 -> 8 -> 8 allora la funzione ritorna il vettore [7, 5] e in *dim restituisce 2.
/* Funzione ausiliaria che ritorna il puntatore al primo massimo della lista L. Se non ci sono massimi ritorna NULL. */ ENum *PrimoMax(const ENum *L) { if (L == NULL || L->next == NULL) return NULL; else { float prec = L->n; L = L->next; while (L->next != NULL && (L->n <= prec || L->n <= L->next->n)) { prec = L->n; L = L->next; } return (L->next != NULL ? L : NULL); } } float *Massimi(const ENum *L, long *dim) { float *vetMax = NULL; long nMax = 0; const ENum *e = L; while ((e = PrimoMax(e)) != NULL) nMax++; //Conta i massimi if (nMax > 0) { long i = 0; vetMax = malloc(nMax*sizeof(float)); //Alloca il vettore dei massimi while ((L = PrimoMax(L)) != NULL) vetMax[i++] = L->n; } *dim = nMax; return vetMax; }
long CatFiles(char *conF, char *catF) { FILE *fcon = fopen(conF, "r+"); //Apri il file conF in lettura e scrittura FILE *fcat = fopen(catF, "r"); //Apri il file catF in lettura long nc = 0; int c; while (fgetc(fcon) != EOF) nc++; //Calcola il numero di caratteri di conF while ((c = fgetc(fcat)) != EOF) { //Aggiungi il contenuto di catF a conF fputc(c, fcon); nc++; } fclose(fcon); fclose(fcat); return nc; }
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |