Duda en esta función

Rev
23 de Abril del 2004
Me podrian dar un tip del como poder resolver este dilema, se trata de convertir un char a char * dentro de esta función

int compara_letras(char letra)
{
char *abecedario[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
short int posicion=0;

for(short int a=0;a<=26;a++)
{
if(letrad==abecedario[a])
posicion=a;
}
printf("%d",posicion);
return posicion;
}

Lo que quiero es comparar la letra que envio y saber cual es la posicion de esa letra dentro del abecedario, si para poder enterderlo mejor necesito poder el resto del código por favor diganme.
(Por cierto gracias a noel_slow por la ayuda antes proporcionada, no pude darte las gracias).

quique
23 de Abril del 2004
Un char es un valor ASCII, es decir, en el fondo, \'a\' es el valor 97 (decimal)

La posición de x (valor 120) dentro del abecedario sería:

char cCurrent = \'x\';
int iPosicion = cCurrent - \'a\' + 1;

Le sumas 1, para tener un "array" basado en 1: asi, la \'a\' tiene la posicion 1 y no la 0.

Salu2

kamegeist
23 de Abril del 2004
int compara_letras(char *letra) {
char *abecedario[26] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

for(int a = 0; a <= 25; a++)
if (strcmp(letra, abecedario[a]) == 0)
return ++a;
}

void main(void) {

cout << compara_letras("C");
getch();
}

kamegeist
23 de Abril del 2004
se me olvidaba que para usar strcmp debes hacer un #include <string.h>, para el cout << ....; debes usar #include <iostream.h>, y getch(); debes usar #include <conio.h>

Alejandro_
23 de Abril del 2004
Rev, me parece que si necesitas comparar caracteres con los contenidos en un "abecedario", tal vez sea mejor usar una estructura diferente, más eficiente. Por ejemplo, en lugar de guardar el abecedario en una array de cadenas de caracteres, podría ser sólo un array de caracteres.

Lo que sería:

char *abecedario = {'A','B','C','D', (...etcétera...) };

y así también funcionará tu

for(short int a=0; a<=26; a++)
{
if(letrad==abecedario[a])
posicion=a;
}

Alejandro

Alejandro_
23 de Abril del 2004
> if(letra==abecedario[a])

yo insisto: abecedario es un array de cadenas de caracteres y no un array de caracteres. En tu comparación, "letra" es un caracter; en cambio, "abecedario[a]" es una cadena de caracteres.

Jamás, nunca esa comparación te va a dar "true".

A ver: supongamos que abecedario[a] == "N"; como "N" es una cadena, está formada por el caracter 'N' más el terminador nulo ''; o sea: N = {'N', ''}; Entonces, abecedario[a] es un puntero y no un carácter.

Ahora supongamos que Letra == 'N';

¿Te parece que 'N' puede ser == &abecedario[0] ?

Alejandro