Traccia:
codice:
Realizzare un programma C che riceve in input due array ordinati di stringhe
di caratteri e produce in output (a video) un unico array risultante dalla
fusione dei due array in input, senza ripetizioni. L'output dovrà inoltre essere
registrato su un file di testo, in cui dovranno comparire gli array in input e
quello di output.
La mia soluzione:
codice:
#include<stdio.h>
#include<string.h>
lettura(char matrice[][20],char matrice2[][20],int n,int m);
stampa(char matrice[][20],char matrice2[][20],int n,int m);
int main()
{
int n,m;
printf("Numero elementi primo vettore: ");
scanf("%d",&n);
char matrice[n][20];//primo vettore di stringhe
printf("Numero elementi secondo vettore: ");
scanf("%d",&m);
char matrice2[m][20];//secondo vettore di stringhe
lettura(matrice,matrice2,n,m);
//stampa(matrice,matrice2,n,m);
char matrice3[n+m][20];
int i=0;
int j=0,k=0;
while(i<n && j<m){
if(strcmp(matrice[i],matrice2[j])<0){
strcpy(matrice3[k],matrice[i]);
i++;
}
else{
strcpy(matrice3[k],matrice2[j]);
j++;
}
k++;
}
while(i<n){
strcpy(matrice3[k],matrice[i]);
i++;
k++;
}
while(j<m){
strcpy(matrice3[k],matrice2[j]);
j++;
k++;
}
for(i=0;i<n+m;i++)
printf("%s ",&matrice3[i]);
printf("\n");
system("pause");
return 0;
}
lettura(char matrice[][20],char matrice2[][20],int n,int m){
int i;
printf("Elementi primo vettore: ");
for(i=0;i<n;i++)
scanf("%s",&matrice[i]);
printf("Elementi secondo vettore: ");
for(i=0;i<m;i++)
scanf("%s",&matrice2[i]);
}
stampa(char matrice[][20],char matrice2[][20],int n,int m){
int i;
printf("Elementi primo vettore: \n");
for(i=0;i<n;i++)
printf("%s\n",&matrice[i]);
printf("Elementi secondo vettoreore: \n");
for(i=0;i<m;i++)
printf("%s\n",&matrice2[i]);
}
Premetto che ho testato l'algoritmo con 2 vettori di numeri e funziona regolarmente. Adesso facendo lo stesso con le stringhe mi da un risultato sbagliato... esempio:
codice:
Numero elementi primo vettore: 4
Numero elementi secondo vettore: 4
Elementi primo vettore: questa e una prova
Elementi secondo vettore: per vedere se funge
per questa e una prova vedere se funge
Premere un tasto per continuare . . .
Dove sbaglio?