|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
[C] Incompatible types in assignment...help!
Devo ordinare un vettore di stringhe in ordine crescente.
L'algoritmo è il selection sort ma ho alcuni errori con le funzioni delle stringhe (strlen e strcpy)...potete darmi una mano? Grazie!!! Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ordina (char (*v)[5], int dim) {
int i, i_min, j;
char *temp;
for (i=0; i<dim-1; i++) {
i_min=i;
for (j=i+1; j<dim; j++)
i=strlen(v[j]);
if ((strlen(v[j])<strlen(v[i_min])) //<-syntax error berfore i_min
i_min=j;
if (i!=i_min) {
temp=strcpy(temp,v[i_min]);
v[i_min]=strcpy(v[i_min], v[i]); //<- incompatible types in assignment
v[i]=strcpy(v[i], temp); //idem
}
}
}
int main() {}
Ultima modifica di alebertaz : 03-07-2006 alle 15:33. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
hai sbagliato la dichiarazione di v.
Hai fatto una specie di puntatore a funzione ma fatto male devi togliere le () Codice:
void ordina (char *v[5], int dim) {
Codice:
if ((strlen(v[j])<strlen(v[i_min]))) /*<-syntax error berfore i_min*/
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
Codice:
void ordina (char (*v)[STRLUNG], int dim) |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
dei puntatori (tipo a stringa a lunghezza fissa etc) perché non mi ricordo il significato di char (*v)[5] ma se non sbaglio é proprio puntatore a char array[5] che c'azzecca poco con la tua funzione. Mi spiace
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
up |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
infatti:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ordina (char (*v)[5], int dim)
{
puts( (char *)v );
}
int main()
{
ordina ( (char (*)[5])"ciao", 1);
}
out: ciao
Tu invece lo tratti come se fosse una array di stringhe
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
Già ma questo è il testo dell'esercizio (ovviamente la mia funzione ordina non è ricorsiva...):
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
se puoi postare il testo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
I prototipi della procedura e della funzione sono: void ordina(char (*v)[STRLUNG], int dim) Lista str listaDispari(char (*v)[STRLUNG], int dim) dove STRLUNG è una costante e dim è la dimensione del vettore di input. Deve essere specificato quale algoritmo di ordinamento `e stato scelto e deve essere dichiarato il tipo utilizzato per definire le liste. Esempio: Sia v = <Quando,un,giorno,da,un,malchiuso,portone> Allora l = [malchiuso,portone]. Ultima modifica di alebertaz : 03-07-2006 alle 16:13. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
char (*v)[STRLUNG] quindi non puó essere un vettore di stringhe. Non l'ho mai usato e visto il suo utilizzo ma mi ricordo che l'avevo visto su un manuale online dedicato proprio alla dichiarazione di puntatori speciali in C. Piú di questo non so che dire. Per me i prototipi sono sbagliati. Non ci vanno le () al puntatore "v". Ma non mi prendo responsabilitá
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Ho risolto così, adesso funziona
Codice:
void ordina (char (*v)[6], int dim) {
int i, i_min, j;
char temp[6];
for (i=0; i<dim-1; i++) {
i_min=i;
for (j=i+1; j<dim; j++)
if ((strlen(v[j])<strlen(v[i_min])))
i_min=j;
if (i!=i_min) {
strcpy(temp, v[i_min]);
strcpy(v[i_min], v[i]);
strcpy(v[i], temp);
}
}
}
// procedura Lista_str listaDispari
int main() {
char x[][6]={{'C','i','a','o','\0'}, {'M','a','x','\0'}};
ordina(x,2);
printf("%s",x[0]); //stampa Max
printf("%s",x[1]); //stampa Ciao
}
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Esercizio risolto
Soluzione completa: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct elem_s {
char val[6];
struct elem_s * next;
} elem_str;
typedef elem_str * Lista_str;
void ordina (char (*v)[6], int dim) {
int i, i_min, j;
char temp[6]; //deve essere lunghezza 6 altrimenti la copia dà errore
for (i=0; i<dim-1; i++) {
i_min=i;
for (j=i+1; j<dim; j++)
if ((strlen(v[j])<strlen(v[i_min])))
i_min=j;
if (i!=i_min) {
strcpy(temp, v[i_min]);
strcpy(v[i_min], v[i]);
strcpy(v[i], temp);
}
}
}
Lista_str listaDispari (char (*v)[6], int dim) {
elem_str* x=(elem_str*)malloc(sizeof(elem_str));
Lista_str l=x;
int i=dim-1;
while (i>=0) {
if ((strlen(v[i]))%2 !=0) {
strcpy(x->val, v[i]);
x->next=(elem_str*)malloc(sizeof(elem_str));
x=x->next;
i--;
}
else i--;
}
return l;
}
int main() {
char x[][6]={{'C','i','a','o','\0'}, {'P','a','o','l','o'},{'M','a','x','\0'}};
Lista_str l=listaDispari(x,3);
ordina(x,3);
printf("%s",x[0]); //stampa Max
printf("%s",x[1]); //stampa Ciao
printf("%s",x[2]); //stampa Paolo
printf("%s",l->val); //stampa Max
printf("%s",l->next->val); //stampa Paolo
}
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
e chi te lo ha fatto, se posso saperlo ?
passare da un'istruzione errata come Codice:
temp=strcpy(temp,v[i_min]); o no ? vabbé, cmq spero tu abbia capito quello che hai fatto
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
...adesso sono ingarbugliato in questo: http://www.hwupgrade.it/forum/showth...0#post12982160 |
|
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Padova
Messaggi: 1870
|
Quote:
ciao! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:24.



















