Ho ragionato su un bel po' di tempo e ho scritto il seguente codice
//assegnare il valore ai caratteri dispari
for (int i=0; i<strlen(dispari); i++) {
if (strncmp(&dispari[i], "0", 1)==0)
val_dispari+=1;
if (strncmp(&dispari[i], "1", 1)==0)
val_dispari+=0;
if (dispari[i] >= '2' && dispari[i] <= '4')
val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 1);
if (dispari[i] >= '5' && dispari[i] <= '9')
val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 3);
if (strncmp(&dispari[i], "a", 1)==0)
val_dispari+=1;
if (strncmp(&dispari[i], "b", 1)==0)
val_dispari+=0;
if (dispari[i] >= 'c' && dispari[i] <= 'e')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 1);
if (dispari[i] >= 'f' && dispari[i] <= 'j')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 3);
if (dispari[i] >= 'k' && dispari[i] <= 'l')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 18);
if (dispari[i] >= 'm' && dispari[i] <= 'n')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 6);
if (strncmp(&dispari[i], "o", 1)==0)
val_dispari+=11;
if (strncmp(&dispari[i], "p", 1)==0)
val_dispari+=3;
if (dispari[i] >= 'q' && dispari[i] <= 'r')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 26);
if (dispari[i] >= 's' && dispari[i] <= 'u')
val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 24 );
if (strncmp(&dispari[i], "v", 1)==0)
val_dispari+=10;
if (strncmp(&dispari[i], "w", 1)==0)
val_dispari+=22;
if (strncmp(&dispari[i], "x", 1)==0)
val_dispari+=25;
if (strncmp(&dispari[i], "y", 1)==0)
val_dispari+=24;
if (strncmp(&dispari[i], "z", 1)==0)
val_dispari+=23;
if (strncmp(&dispari[i], "\0", 1)==0)
val_dispari+=0;
}
Equivalente al codice precedente:
//assegnare il valore ai caratteri dispari
for (int i=0; i<strlen(dispari); i++) {
if (strncmp(&dispari[i], "0", 1)==0)
val_dispari+=1;
if (strncmp(&dispari[i], "1", 1)==0)
val_dispari+=0;
if (strncmp(&dispari[i], "2", 1)==0)
val_dispari+=5;
if (strncmp(&dispari[i], "3", 1)==0)
val_dispari+=7;
if (strncmp(&dispari[i], "4", 1)==0)
val_dispari+=9;
if (strncmp(&dispari[i], "5", 1)==0)
val_dispari+=13;
if (strncmp(&dispari[i], "6", 1)==0)
val_dispari+=15;
if (strncmp(&dispari[i], "7", 1)==0)
val_dispari+=17;
if (strncmp(&dispari[i], "8", 1)==0)
val_dispari+=19;
if (strncmp(&dispari[i], "9", 1)==0)
val_dispari+=21;
if (strncmp(&dispari[i], "a", 1)==0)
val_dispari+=1;
if (strncmp(&dispari[i], "b", 1)==0)
val_dispari+=0;
if (strncmp(&dispari[i], "c", 1)==0)
val_dispari+=5;
if (strncmp(&dispari[i], "d", 1)==0)
val_dispari+=7;
if (strncmp(&dispari[i], "e", 1)==0)
val_dispari+=9;
if (strncmp(&dispari[i], "f", 1)==0)
val_dispari+=13;
if (strncmp(&dispari[i], "g", 1)==0)
val_dispari+=15;
if (strncmp(&dispari[i], "h", 1)==0)
val_dispari+=17;
if (strncmp(&dispari[i], "i", 1)==0)
val_dispari+=19;
if (strncmp(&dispari[i], "j", 1)==0)
val_dispari+=21;
if (strncmp(&dispari[i], "k", 1)==0)
val_dispari+=2;
if (strncmp(&dispari[i], "l", 1)==0)
val_dispari+=4;
if (strncmp(&dispari[i], "m", 1)==0)
val_dispari+=18;
if (strncmp(&dispari[i], "n", 1)==0)
val_dispari+=20;
if (strncmp(&dispari[i], "o", 1)==0)
val_dispari+=11;
if (strncmp(&dispari[i], "p", 1)==0)
val_dispari+=3;
if (strncmp(&dispari[i], "q", 1)==0)
val_dispari+=6;
if (strncmp(&dispari[i], "r", 1)==0)
val_dispari+=8;
if (strncmp(&dispari[i], "s", 1)==0)
val_dispari+=12;
if (strncmp(&dispari[i], "t", 1)==0)
val_dispari+=14;
if (strncmp(&dispari[i], "u", 1)==0)
val_dispari+=16;
if (strncmp(&dispari[i], "v", 1)==0)
val_dispari+=10;
if (strncmp(&dispari[i], "w", 1)==0)
val_dispari+=22;
if (strncmp(&dispari[i], "x", 1)==0)
val_dispari+=25;
if (strncmp(&dispari[i], "y", 1)==0)
val_dispari+=24;
if (strncmp(&dispari[i], "z", 1)==0)
val_dispari+=23;
if (strncmp(&dispari[i], "\0", 1)==0)
val_dispari+=0;
}
Si può migliorare ancora il primo codice che ho scritto secondo voi?