tengo esta frase:
la cábala de la señora
quiero que me salga esto
LA CABALA DE LA SEÑORA
este es mi programa usando el codigo ASCII, pero no funciona, me devuelve la ñ y la á en minuscula
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{char cad[100]; int i;
printf("Frase: ");
gets(cad);
for(i=0;i<strlen(cad);i++){
if(cad==160)
cad=cad-95;
else if(cad=='ñ')
cad=cad+1;
else if(cad>=97 && cad<=122)
cad=cad-32;
}
printf("\n%s",cad);
getch();}
Nota inicial: El código, mejor si lo pones con las etiquetas GeSHi. Gracias.
No existe una única conversión "número<->carácter", sino que hay muchas. Algunas tablas de conversión son ASCII, UTF-8, UTF-16, las diferentes tablas ANSI...
Esta heterogeneidad explica que en algunas páginas Web o correos electrónicos, a veces aparezcan caracteres raros sustituyendo caracteres acentuados o propios de un lenguaje concreto.
En tu caso, lo que puede suceder es que tu programa no esté usando la codificación ASCII. Puede que esté usando, por ejemplo, UTF-8, con lo que la codificación de la 'á' y la 'ñ' serán diferentes.
Cita de: jesus++ en 10 Julio 2014, 05:23 AM
......................................
este es mi programa usando el codigo ASCII, pero no funciona, me devuelve la ñ y la á en minuscula
..................................
Usa un:
for(i=0;i<strlen(cad);i++)
printf("%d ",cad[i]);
para que veas con qué int se corresponden la ñ y la á y ya
tá.¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: leosansan en 10 Julio 2014, 10:14 AM
Usa un:
for(i=0;i<strlen(cad);i++)
printf("%d ",cad[i]);
para que veas con qué int se corresponden la ñ y la á y ya tá.
Si por ejemplo fuese UTF-8... la codificación de la 'ñ' y la 'á' ocuparían más de un byte.
Cita de: eferion en 10 Julio 2014, 10:47 AM
Si por ejemplo fuese UTF-8... la codificación de la 'ñ' y la 'á' ocuparían más de un byte.
He probado y la ñ sigue siendo -92, pero la á no aparece. ¿Qué puedo hacer en este caso?.
Saludos, ¡fenómeno!.
No sabría decirte... a mi me funcionan las dos:
á = -96
ñ = -92
... yo estoy compilando con un compilador de C++, no tengo muy claro hasta que punto influye en este caso.
Cita de: eferion en 10 Julio 2014, 13:06 PM
No sabría decirte... a mi me funcionan las dos:
á = -96
ñ = -92
... yo estoy compilando con un compilador de C++, no tengo muy claro hasta que punto influye en este caso.
Es que yo lo puse File enconding "UTF-8 y es donde la á no aparece. :silbar:
En UTF-8 los valores esperados deberían ser los siguientes:
á: 0xc3 0xa1 - 2 caracteres.
ñ: 0xc3 0xb1 - 2 caracteres.
así pues para poder leer cada carácter necesitas dos lecturas consecutivas de tipo char.
Ahora sí:
Citar
LA CABALA DE LA SEÑORA
*****************
for ( i = 0 ; i < strlen(cad) ; i++ ){
if( cad[i] == 'á' )
cad[i] = 65 ;
else if (cad[i] == 'ñ' )
cad[i] = 165 ;
else if( cad[i] == ' ' )
continue ;
else if( cad[i] >= 97 && cad[i] <= 122 )
cad[i] = cad[i] -32 ;
}
*************************
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Funcionando para pasar de min a may (me sirve para tenerlo en el foro por si lo busco), ahora veo el tema de los tildes.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
//PRUEBAS
unsigned char asd;
asd = 'a'; //97
asd = 'ñ'; //241
asd = 'z'; //122
asd = 'A'; //65
asd = 'Ñ'; //209
asd = 'Z'; //90
cout << int(asd) << endl;
//PRUEBAS
char cad[100];
printf("Frase: ");
gets(cad);
cout << cad << endl;
for(int i = 0; i < strlen(cad); i++)
{
if (int(cad[i]) >= 97 && int(cad[i]) <= 122 || int(cad[i]) == 241)
{
cad[i] = cad[i] - 32;
}
}
cout << cad << endl;
system("pause");
return 0;
}