Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]-Esercizio - Merge sort di 2 array di stringhe

    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?

  2. #2
    Ma non si dava per ipotesi che i due array di stringhe fossero ordinati? Quelli che hai inserito da input non lo sono!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Originariamente inviato da Laikius91
    Ma non si dava per ipotesi che i due array di stringhe fossero ordinati? Quelli che hai inserito da input non lo sono!
    Oddio, che figuraccia Scusate, la confusione non è mai troppa... almeno ho dato un piccolo supporto al forum

    Grazie per avermi fatto notare dove sbagliavo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.