Duda en programa uso char

Iniciado por indict, 18 Marzo 2013, 20:48 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

Hola,
Tengo que realizar un programa el cual 2 dada un carácter leído desde teclado devolver su lugar en el alfabeto (a=1, z=26) independientemente si es mayúscula o minúscula. Si no es letra devolver el valor 0 ó si es un espacio en blanco devolver el valor -1.

Mi problema está que no me quedan caracteres para utilizar, ya que si utilizo 'ñ' (que no está en el alfabeto) me da un error del tipo stray '\347' creo que es debido a que char no puede guardar el valor en la letra 'ñ'.

Aquí hasta donde he llegado:
Citar#include<iostream>
using namespace std;
int main(){
char ñ,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,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;
cin>>ñ;
if(ñ=='a' or ñ=='A'){cout<<"1"<<endl;}
else if(ñ=='b' or ñ=='B'){cout<<"2"<<endl;}
else if(ñ=='c' or ñ=='C'){cout<<"3"<<endl;}
else if(ñ=='d' or ñ=='D'){cout<<"4"<<endl;}
else if(ñ=='e' or ñ=='E'){cout<<"5"<<endl;}
else if(ñ=='f' or ñ=='F'){cout<<"6"<<endl;}
else if(ñ=='g' or ñ=='G'){cout<<"7"<<endl;}
else if(ñ=='h' or ñ=='H'){cout<<"8"<<endl;}
else if(ñ=='i' or ñ=='I'){cout<<"9"<<endl;}
else if(ñ=='j' or ñ=='J'){cout<<"10"<<endl;}
else if(ñ=='k' or ñ=='K'){cout<<"11"<<endl;}
else if(ñ=='l' or ñ=='L'){cout<<"12"<<endl;}
else if(ñ=='m' or ñ=='M'){cout<<"13"<<endl;}
else if(ñ=='n' or ñ=='N'){cout<<"14"<<endl;}
else if(ñ=='o' or ñ=='O'){cout<<"15"<<endl;}
else if(ñ=='p' or ñ=='P'){cout<<"16"<<endl;}
else if(ñ=='q' or ñ=='Q'){cout<<"17"<<endl;}
else if(ñ=='r' or ñ=='R'){cout<<"18"<<endl;}
else if(ñ=='s' or ñ=='S'){cout<<"19"<<endl;}
else if(ñ=='t' or ñ=='T'){cout<<"20"<<endl;}
else if(ñ=='u' or ñ=='U'){cout<<"21"<<endl;}
else if(ñ=='v' or ñ=='V'){cout<<"22"<<endl;}
else if(ñ=='w' or ñ=='W'){cout<<"23"<<endl;}
else if(ñ=='x' or ñ=='X'){cout<<"24"<<endl;}
else if(ñ=='y' or ñ=='Y'){cout<<"25"<<endl;}
else if(ñ=='z' or ñ=='Z'){cout<<"26"<<endl;}



}

Gracias

avesudra

#1
Ufff , hay una forma más sencilla de hacerlo, cada letra en la tabla ASCII tiene un valor, la ñ es un carácter extendido por lo que tendrás que hacer otra cosa para añadirla, bueno si te fijas en esta tabla:

Las letras mayúsculas van desde el rango 65 hasta el 90, sin la ñ. Para que la A te quede como 1 pues haces 65 - 64 , y tienes la posición desde las letras A hasta la N , para los rangos desde la O hasta la Z puedes restar el valor de la letra menos 63 dado que en la tabla ASCII no cuentan la Ñ. En este código compruebo las letras y el valor que no sea pues siempre da 15 dado que sería la Ñ.
Código (cpp) [Seleccionar]
#include <iostream>
#include <locale>

using namespace std;

int main ( int argc , char *argv[])
{
    char letra = 0;

    cout << "Introduzca la letra: ";

    cin.get(letra);

    letra = toupper(letra);

    if((letra >= 'A') && (letra <= 'N'))
        cout << "La posicion de tu letra en el alfabeto es " << ((unsigned int)letra)-64 << endl;
    else if ((letra >= 'O') && (letra <= 'Z'))
        cout << "La posicion de tu letra en el alfabeto es " << ((unsigned int)letra)-63 << endl;
    switch (letra)
    {
    case ' ':
        cout << -1;
        break;
    default:
        cout << "La posicion de tu letra en el alfabeto es " << 15 << endl;
    }
    return 0;
}

Es que trabajar con la ñ es muy jodido quizás alguien de por aquí si sepa más que yo porque me parece que varía según el S.O.

¡Saludos!
Regístrate en

indict

Muchas gracias por la respuesta :D

Lo único es que debería especificar las variables (letras del abecedario).

Saludos!