Como pasar a mayuscula vocales acentuadas ?

Iniciado por jesus++, 10 Julio 2014, 05:23 AM

0 Miembros y 3 Visitantes están viendo este tema.

jesus++

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

eferion

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.

leosansan

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:

Código (cpp) [Seleccionar]
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! ..... !!!!



eferion

Cita de: leosansan en 10 Julio 2014, 10:14 AM
Usa un:

Código (cpp) [Seleccionar]
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.

leosansan

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!.


eferion

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.

leosansan

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:


eferion

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.

leosansan

#8
Ahora sí:

Citar

LA CABALA DE LA SEÑORA


Código (cpp) [Seleccionar]
*****************
  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! ..... !!!!



Miseryk

#9
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.

Código (cpp) [Seleccionar]

#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;
}
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!