Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: jesus++ en 10 Julio 2014, 05:23 AM

Título: Como pasar a mayuscula vocales acentuadas ?
Publicado por: jesus++ en 10 Julio 2014, 05:23 AM
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();}
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: eferion en 10 Julio 2014, 10:09 AM
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.
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: leosansan en 10 Julio 2014, 10:14 AM
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! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: eferion en 10 Julio 2014, 10:47 AM
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.
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: leosansan en 10 Julio 2014, 12:56 PM
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!.

Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: 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.
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: leosansan en 10 Julio 2014, 13:12 PM
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:

Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: eferion en 10 Julio 2014, 13:18 PM
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.
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: leosansan en 12 Julio 2014, 22:42 PM
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! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: Como pasar a mayuscula vocales acentuadas ?
Publicado por: Miseryk en 16 Julio 2014, 21:38 PM
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;
}