PDA

Visualizza la versione completa : [C] unione di due array di stringhe con ordinamento


hipnose
11-06-2017, 19:38
Ciao a tutti, chi mi aiuta a svolgere questo esercizio?

Chiedere all’utente di fornire in input due array di stringhe di dimensione a piacere. Restituire in output un unico array, unione dei due precedenti, ordinato alfabeticamente.
Scrivere in un file gli array forniti in partenza e l’array risultato.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#pragma warning(disable:4996)
#define MAXCHAR 100




void unione(char *A[], char *B[], char *C[], int n1, int n2);// esegue la fusione tra i due array in un unico array
void stampa(char *C[], int n3);
void ordinamento(char *C[], int n3);
void swap(char *a, char *b);










void main() { //inserimento dati
char *A[MAXCHAR];// primo array
char *B[MAXCHAR];//secondo array
char *C[MAXCHAR];//array risultante comprente tutti gli elementi del primo e tutti gli eleemnti del secondo
int n1, n2, n3;
n3 = n1 + n2;
int i;
printf("Inserisci il numero di elementi del primo vettore:\n");
scanf("%d", &n1);

for (i = 0; i < n1; i++) {
A[i] = (char*)malloc(MAXCHAR * sizeof(char));
printf("Inserisci il %d numero: ", i+1);
scanf("%s", A[i]);


}
printf("Inserisci il numero di elementi del secondo vettore:\n");
scanf("%d", &n2);

for (i= 0; i< n2; i++) {
B[i] = (char*)malloc(MAXCHAR * sizeof(char));
printf("Inserisci il %d numero: ", i+1 );
scanf("%s", B[i]);
}

unione(A, B, C, n1, n2);

free(A);
free(B);
free(C);


}


void unione(char *A[], char *B[], char *C[], int n1, int n2){ /*funziona che prende glie elementi del primo array
e gli elementi del secono array e li inserisce in un terzo array*/
int i;
for (i = 0; i < n1; i++) {
strcpy(C[i], A[i]);
}


for (i = 0; i < n2; i++) {
strcpy(C[n1 + i], B[i]);
}








for (int i = 0; i < n1 + n2; i++) {
printf("%d:%s\n", i, C[i]);
printf("\n");


}

sono bloccata qui, mi carica solo gli elementi degli array senza copiarli nel secondo array.
Grazie!

oregon
11-06-2017, 19:51
Forse fai un po' di confusione ...

Questo

char *A[MAXCHAR]

è un array di MAXCHAR puntatori a stringhe ... Non è quello che pensi tu ...

hipnose
11-06-2017, 20:08
Forse fai un po' di confusione ...

Questo

char *A[MAXCHAR]

è un array di MAXCHAR puntatori a stringhe ... Non è quello che pensi tu ...


si, del tipo in A[0] mela A[1] pera e cosi via, idem per l'array B

oregon
11-06-2017, 21:52
si, del tipo in A[0] mela A[1] pera e cosi via, idem per l'array B

A[0] punta a "mela" ma non si capisce perché MAXCHAR ... La grandezza del vettore dovrebbe essere uguale al numero massimo di stringhe...

hipnose
11-06-2017, 21:56
A[0] punta a "mela" ma non si capisce perché MAXCHAR ... La grandezza del vettore dovrebbe essere uguale al numero massimo di stringhe...

numero massimo di caratteri che può contenere

hipnose
11-06-2017, 21:57
gli array me li carica bene, ma non riesco ad unirli nell'array C...non riesco a capire dove sto sbagliando

oregon
11-06-2017, 22:08
Non hai capito quello che ho scritto ... te lo spiegherà il professore ...

La copia non funziona perché gli elementi di C non sono allocati (anzi, potrebbe andare tutto in crash)

Le free sono tutte sbagliate

Loading