Foro de elhacker.net

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
......................................
este es mi programa usando el codigo ASCII, pero no funciona, me devuelve la ñ y la á en minuscula
..................................

Usa un:

Código
  1. for(i=0;i<strlen(cad);i++)
  2.    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
Usa un:

Código
  1. for(i=0;i<strlen(cad);i++)
  2.    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
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
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
  1. *****************
  2.  for ( i = 0 ; i < strlen(cad) ; i++ ){
  3.    if( cad[i] == 'á' )
  4.      cad[i] = 65 ;
  5.    else if (cad[i] == 'ñ' )
  6.      cad[i] = 165 ;
  7.    else if( cad[i] == ' ' )
  8.      continue ;
  9.    else if( cad[i] >= 97 && cad[i] <= 122 )
  10.      cad[i] = cad[i] -32 ;
  11.  }
  12. *************************

¡¡¡¡ 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
  1. #include <iostream>
  2. #include <Windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. //PRUEBAS
  9. unsigned char asd;
  10.  
  11. asd = 'a'; //97
  12. asd = 'ñ'; //241
  13. asd = 'z'; //122
  14.  
  15. asd = 'A'; //65
  16. asd = 'Ñ'; //209
  17. asd = 'Z'; //90
  18.  
  19. cout << int(asd) << endl;
  20. //PRUEBAS
  21.  
  22. char cad[100];
  23.  
  24. printf("Frase: ");
  25. gets(cad);
  26.  
  27. cout << cad << endl;
  28.  
  29. for(int i = 0; i < strlen(cad); i++)
  30. {
  31. if (int(cad[i]) >= 97 && int(cad[i]) <= 122 || int(cad[i]) == 241)
  32. {
  33. cad[i] = cad[i] - 32;
  34. }
  35. }
  36.  
  37. cout << cad << endl;
  38.  
  39. system("pause");
  40.  
  41. return 0;
  42. }
  43.