View Full Version : [C] problema confronto stringhe
Ciao a tutti, dovrei implementare questa funzione: char **pos_min(char **begin, char **end) che ritorna il puntatore alla stringa
“minima” (nel senso definito da strcmp()) nel sottovettore begin. . . end.
Qualcuno mi può aiutare? Grazie mille
Ciao a tutti, dovrei implementare questa funzione: char **pos_min(char **begin, char **end) che ritorna il puntatore alla stringa
“minima” (nel senso definito da strcmp()) nel sottovettore begin. . . end.
Qualcuno mi può aiutare? Grazie milleInnanzitutto hai dichiarato dei puntatori a puntatori a char (char**), quindi con cosa hai a che fare? Con un array di puntatori a char, cioè con un array di stringhe?
Innanzitutto hai dichiarato dei puntatori a puntatori a char (char**), quindi con cosa hai a che fare? Con un array di puntatori a char, cioè con un array di stringhe?
si esatto. Per esempio se le stringhe che dichiaro in input sono Tom,Chris e David la funzione mi deve restituire in output Chris David Tom
si esatto. Per esempio se le stringhe che dichiaro in input sono Tom,Chris e David la funzione mi deve restituire in output Chris David TomBenissimo, quindi 'begin' e 'end' sono due puntatori che puntano dentro un array di puntatori a char. Pertanto si prende in considerazione solamente una porzione dell'array di stringhe.
In output si deve restituire un nuovo array di stringhe che contiene i puntatori alle stringhe. L'array è tale per cui le stringhe sono ordinate.
Dovresti quindi:
a) Determinare quante stringhe ci sono nella porzione dell'array delimitata da begin e end. Lo calcoli facilmente perché sizeof(char*) ti dice quanto occupa un puntatore.
b) Allocare un nuovo array di puntatori a char.
c) Usare un algoritmo di ordinamento per ordinare le stringhe. Chiaramente ti conviene impostare il nuovo array con le stringhe così come sono (non ordinate) e quindi ordinare il nuovo array, così non alteri l'array originale!
Che algoritmo di ordinamento usare lo devi sapere tu ... non so se ti è stato imposto un algoritmo specifico o se puoi stabilirlo tu.
P.S. Domanda: la stringa puntata da 'end' è esclusa o inclusa?
avevo pensato a una cosa del genere
char **pos_min(char **begin, char **end)
{
char **res=begin;
for(begin++; begin<=end; begin++)
//if(**begin<**res)
res=begin;
return res;
}
con al posto dell' if commentato l' uso di strcmp che però non riesco a fare. Se mi puoi aiutare ti ringrazio
Edit: uso poi questa pos_min in un selection sort
avevo pensato a una cosa del genere
char **pos_min(char **begin, char **end)
{
char **res=begin;
for(begin++; begin<=end; begin++)
//if(**begin<**res)
res=begin;
return res;
}
con al posto dell' if commentato l' uso di strcmp che però non riesco a fare. Se mi puoi aiutare ti ringrazioSe 'begin' è l'indirizzo della cella dove c'è il puntatore alla stringa, allora *begin è il puntatore alla stringa. Pertanto ti basta passare a strcmp *begin e *res. Se la prima è inferiore alla seconda (< 0), allora assegni begin a res.
P.S.: dal tuo esempio di prima "Per esempio se le stringhe che dichiaro in input sono Tom,Chris e David la funzione mi deve restituire in output Chris David Tom" avevo capito che volevi ottenere come ritorno un array ordinato. :p
Potresti mica scrivermelo in linguaggio C sintatticamente corretto?
Edit: Grazie ma non serve più, ci sono riuscito. Non so proprio come ringraziarti per l' aiuto!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.