Buongiorno,
in un esercizio universitario devo risolvere il seguente problema:
Scrivete una funzione con prototipo
void smallest_largest( char *s[], int n, char **smallest, char **largest )
che, dato un array s lungo n di stringhe, trovi gli elementi minimo e massimo nell’array (secondo l’ordine alfabetico) e memorizzi gli indirizzi delle loro posizioni nel vettore s negli indirizzi di memoria puntati rispettivamente da smallest e da largest.
Nel cercare di risolvere l'esercizio, tuttavia, ho difficoltà ad assegnare correttamente l'indirizzo delle due parole ai rispettivi puntatori. Mi è anche sorto il dubbio che ci sia un errore nel testo, perché i due elementi smallest e largest sono semplicemente la parola più piccola e più grande, quindi una sola stringa, non dovrebbe servire un array frastagliato, dovrebbe bastare un puntatore a char.
Per memorizzare l'indirizzo della parola più piccola, una volta trovata, uso l'istruzione
*smallest = s
, dove s è la stringa nell'array frastagliato (così facendo dovrei memorizzare direttamente l'indirizzo nel puntatore), idem per il massimo. Non capisco cosa non funzioni.
Di seguito il codice
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
#include "string.h"
void smallest_largest( char *s[], int n, char **smallest, char **largest ) {
for(int i=0; i<n; i++) {
char *p1 = s[i];
int j;
for(j=i+1; j<n; j++) {
char *p2 = s[j];
if(strcmp(p1, p2) > 0) {
break;
}
}
if(j==n) {
*smallest = s[i];
break;
}
for(j=i+1; j<n; j++) {
char *p2 = s[j];
if(strcmp(p1, p2) < 0) {
break;
}
}
if(j==n) {
*largest = s[i];
break;
}
}
}
int main( int argc, char *argv[] ) {
char* dict [] = { " ciao " , " mondo " , " come " , " aaa " , " bene " , " il " , " programma " };
int lun = 7;
char **smallest;
char **largest;
smallest_largest(dict, lun, smallest, largest);
printf("Parola minima: %s\nParola massima: %s\n", *smallest, *largest);
return 0;
}
Se qualcuno mi sa offrire il suo aiuto gli e ne sarei grato.