Ho due vettori:uno contenente degli interi, l'altro dei caratteri. Devo mettere in ogni cella di terzo vettore il carattere precedente in ordine lessicografico a quello presente nel vettore di caratteri il cui indice è indicato dal vettore di interi.
Per esempio:
Il vettore di interi è: 3 9 1

Il vettore di caratteri è: b c d e f g h i l

quindi nel terzo vettore andrà: c i a

Il codice che ho scritto per fare questo è:
codice:
void elabora(char dec[],int *dimd, int vet[],int dimv,char mat[])
{
    int i;
    i=0;
    for(i=0;i<dimv;i++)
    {
        dec[i]=(mat[vet[i]]-1);
    }
    *dimd=i;
 }
Ma purtroppo non viene scalato il carattere in ordine lessicografico, o meglio, viene scalato come SE considerassimo il carattere successivoa quello effettivo(infatti se metto -2 invece di -1 ottengo i caratteri cercati). In pratica:




Il main è:
codice:
int dimv,dimm,dimd,i;
    int vet[100];
    char mat[50],dec[100];
    lettura(vet,&dimv,mat,&dimm);
    if(dimv==-1)
    {
        printf("Errore nell'apertura di uno dei due file\n");
    }
    else
    {
        printf("Stampa vettore numerico\n");
        for(i=0;i<dimv;i++)
        {
            printf("%d ", vet[i]);
        }
        printf("\n");
        printf("Stampa vettore di caratteri\n");
        for(i=0;i<dimm;i++)
        {
            printf("%c", mat[i]);
        }
        elabora(dec,&dimd,vet,dimv,mat);
        printf("\n");
        printf("Stampa risultato(invece di casa)\n");
        for(i=0;i<dimd;i++)
        {
            printf("%c",dec[i]);
        }
        printf("\n");
 }