Demandred
16-04-2008, 12:29
Ciao ragazzi, vi sarei molto grato se mi indicaste dove sbaglio nel seguente codice. Ho provato di tutto ma proprio non si vuole ordinare questo array....
Ogni volta mi da una stringa fuori posto.
Penso che l'errore sia in posmin ma non lo trovo:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char **leggi_stringhe(int n);
void selsort(char **begin, char **end);
char **pos_min(char **begin, char **end);
void swap(char **a, char **b);
void stampa_stringhe(char **t, int n);
void elimina(char **p, int n);
int main(void) {
char **v;
int n;
printf("Numero di stringhe da ordinare:\n ");
scanf("%d", &n);
v=leggi_stringhe(n);
if( v!=NULL ) {
selsort(v,v+n-1); // Ordina
printf( "\nVettore ordinato:\n" );
stampa_stringhe(v,n); // Stampa
elimina(v,n);
}
else printf( "Input fallito." );
system("pause");
}
char **leggi_stringhe(int n) {
char **p=(char **)malloc(sizeof(char*));
int i;
char *temp=(char *)malloc(sizeof(char));
if( p!=NULL ) {
for (i=0; i<n; i++) {
printf("Inserisci la stringa\n");
scanf("%s", temp);
p[i] = strdup(temp);
}
}
free(temp);
return p;
}
void selsort(char **begin, char **end) {
int i;
for (i = 0;(begin+i)!= end; i++)
swap((pos_min((begin+i), end)), (begin+i));
}
char **pos_min(char **begin, char **end) {
int i;
char **iter = begin;
for (i=0; (begin+i)!= end; i++) {
if (strcmp(*(begin+i),*(begin+1+i)) > 0)
iter=(begin+1+i);
}
return iter;
}
void swap(char **a, char **b) {
char *temp;//=(char *)malloc(sizeof(char));
temp = *a;
*a = *b;
*b = temp;
}
void stampa_stringhe(char **t, int n) {
int i;
for (i=0; i<n; i++) {
printf("%s\n", t[i]);
}
}
void elimina(char **p, int n) {
int i;
for (i=0; i<n; i++) {
free(p[i]);
}
free(p);
}
Ogni volta mi da una stringa fuori posto.
Penso che l'errore sia in posmin ma non lo trovo:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char **leggi_stringhe(int n);
void selsort(char **begin, char **end);
char **pos_min(char **begin, char **end);
void swap(char **a, char **b);
void stampa_stringhe(char **t, int n);
void elimina(char **p, int n);
int main(void) {
char **v;
int n;
printf("Numero di stringhe da ordinare:\n ");
scanf("%d", &n);
v=leggi_stringhe(n);
if( v!=NULL ) {
selsort(v,v+n-1); // Ordina
printf( "\nVettore ordinato:\n" );
stampa_stringhe(v,n); // Stampa
elimina(v,n);
}
else printf( "Input fallito." );
system("pause");
}
char **leggi_stringhe(int n) {
char **p=(char **)malloc(sizeof(char*));
int i;
char *temp=(char *)malloc(sizeof(char));
if( p!=NULL ) {
for (i=0; i<n; i++) {
printf("Inserisci la stringa\n");
scanf("%s", temp);
p[i] = strdup(temp);
}
}
free(temp);
return p;
}
void selsort(char **begin, char **end) {
int i;
for (i = 0;(begin+i)!= end; i++)
swap((pos_min((begin+i), end)), (begin+i));
}
char **pos_min(char **begin, char **end) {
int i;
char **iter = begin;
for (i=0; (begin+i)!= end; i++) {
if (strcmp(*(begin+i),*(begin+1+i)) > 0)
iter=(begin+1+i);
}
return iter;
}
void swap(char **a, char **b) {
char *temp;//=(char *)malloc(sizeof(char));
temp = *a;
*a = *b;
*b = temp;
}
void stampa_stringhe(char **t, int n) {
int i;
for (i=0; i<n; i++) {
printf("%s\n", t[i]);
}
}
void elimina(char **p, int n) {
int i;
for (i=0; i<n; i++) {
free(p[i]);
}
free(p);
}