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");
}