Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 24 Febrero 2013, 18:15 pm



Título: convertir minúscula a mayúscula
Publicado por: m@o_614 en 24 Febrero 2013, 18:15 pm
Alguien sabe de alguna manera de convertir de minúscula a mayúscula sin la necesidad de rstarle - 32, es que tengo un problema que me pide que le ingrese una letra, si la letra es mayúscula lo dejo así, pero si la letra es minúscula tengo que hacer que el código me la reconozca como si ffuera mayúscula


gracias ;D


Título: Re: convertir minúscula a mayúscula
Publicado por: 85 en 24 Febrero 2013, 19:05 pm
Si estás de acuerdo en usar la librería standart:

http://es.wikipedia.org/wiki/Ctype.h

tenés una lista como la siguiente para hacer conversiones de ese tipo:

tolower
toupper
strlwr
strupper
islower
isupper
etc

Eso en primer lugar, ahora sino querés usar el código ASCII podés hacer algo más costoso pero efectivo.

Osea que tu cadena va a ser examinada char por char para comprobar que se trate de una letra, ya sea mayúscula o minúscula. No se si es lo que pedís realmente, espero haberte ayudado

Código:
bool SonLetras(const char* buf)
{
#define MAX_ALFA 53
const char alfabetico[] = {
'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',0};
int ok=0;
int len = strlen(buf);
for(int i=0; i<len; i++){
for(int j=0; j<MAX_ALFA; j++){
if(buf[i]==alfabetico[j]){
ok++;
break;
}}}
if(ok==len) return true;
return false;
}



Título: Re: convertir minúscula a mayúscula
Publicado por: MeCraniDOS en 24 Febrero 2013, 19:59 pm
De minúscula a mayuscula:

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main()
  5. {
  6.   char cadena[50];
  7.   int i;
  8.  
  9.   printf("\nEscribe un letra o frase: ");
  10.   scanf("%s", &cadena);
  11.  
  12.   for(i = 0; cadena[i]; i++)
  13.      cadena[i] = toupper(cadena[i]);
  14.  
  15.   printf("\n%s\n", cadena);
  16.  
  17.    fflush(stdin);
  18.    printf("\nPresiona Intro para finalizar...");
  19.    getchar();
  20. }
  21.  

De mayúscula a minuscula:

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main()
  5. {
  6.   char cadena[50];
  7.   int i;
  8.  
  9.   printf("\nEscribe un letra o frase: ");
  10.   scanf("%s", &cadena);
  11.  
  12.   for(i = 0; cadena[i]; i++)
  13.      cadena[i] = tolower(cadena[i]);
  14.  
  15.   printf("\n%s\n", cadena);
  16.  
  17.    fflush(stdin);
  18.    printf("\nPresiona Intro para finalizar...");
  19.    getchar();
  20. }
  21.  

Espero que te sirva  ::) ::)

Saludos.


Título: Re: convertir minúscula a mayúscula
Publicado por: leosansan en 24 Febrero 2013, 22:04 pm
Alguien sabe de alguna manera de convertir de minúscula a mayúscula sin la necesidad de rstarle - 32, es que tengo un problema que me pide que le ingrese una letra, si la letra es mayúscula lo dejo así, pero si la letra es minúscula tengo que hacer que el código me la reconozca como si ffuera mayúscula
.................................................................................


¿Qué problema tienes en restarle 32?. Si fuera una frase vale, pero para una letra es lo más cómodo, sin librerías ni funciones:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  char ch;
  5.  printf("\nEscribe una letra: ");
  6.  ch=getchar ();
  7.  if (ch>97 || ch<122)
  8.  ch-=32;
  9.  printf("\n%c\n", ch);
  10.  return 0;
  11. }


Saluditos!.


Título: Re: convertir minúscula a mayúscula
Publicado por: rir3760 en 25 Febrero 2013, 18:51 pm
Algunos comentarios sobre la función:
Código
  1. bool SonLetras(const char* buf)
  2. {
  3. #define MAX_ALFA 53
  4. const char alfabetico[] = {
  5. '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',
  6. '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',0};
  7. int ok=0;
  8. int len = strlen(buf);
  9. for(int i=0; i<len; i++){
  10. for(int j=0; j<MAX_ALFA; j++){
  11. if(buf[i]==alfabetico[j]){
  12. ok++;
  13. break;
  14. }}}
  15. if(ok==len) return true;
  16. return false;
  17. }

* No es una buena idea utilizar una macro como esta:
Código
  1. #define MAX_ALFA 53
Porque si nos equivocamos en la macro o en la lista de elementos del array la función ya no tendría el comportamiento esperado. Es mejor delegar la tarea al compilador utilizando el operador sizeof.

* No es necesario llamar a la función strlen ya que el final de la cadena se puede conocer al comparar al carácter siendo procesado con '\0'.

* Para evitar el condicional dentro del bucle interno se puede utilizar un centinela colocando el carácter a buscar en la ultima posición del array (la ocupada por el '\0').

* Si el objetivo es retornar verdadero solo si todos los caracteres son alfabéticos no se debe verificar toda la cadena una vez se encuentre un carácter que no cumpla esa condición.

Con los cambios:
Código
  1. bool SonLetras(const char *str)
  2. {
  3.   char abc[] = {
  4.      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  5.      "abcdefghijklmnopqrstuvwxyz"
  6.   };
  7.   size_t num_chars = sizeof abc - 1;
  8.   size_t i;
  9.   size_t j;
  10.  
  11.   for (i = 0; str[i] != '\0'; i++){
  12.      abc[num_chars] = str[i];
  13.  
  14.      for (j = 0; abc[j] != str[i]; j++)
  15.         ;
  16.      if (j == num_chars)
  17.         return false;
  18.   }
  19.  
  20.   return true;
  21. }

Un saludo


Título: Re: convertir minúscula a mayúscula
Publicado por: Stakewinner00 en 25 Febrero 2013, 19:31 pm
jugando con los
Código:
#define 
creo que podrías hacer algo como
Código:
#define A a
#define B b
#define C c

o algo así sin necesidad de mucho codigo.


Título: Re: convertir minúscula a mayúscula
Publicado por: leosansan en 25 Febrero 2013, 20:35 pm
jugando con los
Código:
#define 
creo que podrías hacer algo como
Código:
#define A a
#define B b
#define C c

o algo así sin necesidad de mucho codigo.

 :laugh: :laugh: :laugh:Muy bueno eso de sin necesidad de mucho código Supongo que te ha pillado en un momento "espeso" querido Stakewinner00 . ;-) ;-) ;-)

Saluditos!.


Título: Re: convertir minúscula a mayúscula
Publicado por: x64core en 25 Febrero 2013, 20:40 pm
Son tan divertidos  ;-)
jugando con los
Código:
#define 
creo que podrías hacer algo como
Código:
#define A a
#define B b
#define C c

o algo así sin necesidad de mucho codigo.


Título: Re: convertir minúscula a mayúscula
Publicado por: Stakewinner00 en 25 Febrero 2013, 21:07 pm
Retiro todo lo dicho, ahora ya con la mente más lúcida vi que no puede funcionar (como mínimo de forma sencilla).


Título: Re: convertir minúscula a mayúscula
Publicado por: Josemanu90 en 24 Abril 2017, 12:12 pm
si es solo una letra como seria?


Título: Re: convertir minúscula a mayúscula
Publicado por: NikNitro! en 24 Abril 2017, 12:31 pm
si es solo una letra como seria?
Hola Josemanu90
Por favor, antes de escribir mira que el tema no sea muy antiguo (acabas de revivir un tema de hace 4 años) y te recomiendo leerte las normas.

Por cierto, la respuesta a tu pregunta está en el post, si no la ves es que quizás tengas una mala base. Crea un post y cúrrate una pregunta, pon tu código y te podremos orientar mejor (orientar, no hacer deberes :P )

Saludos;)