convertir minúscula a mayúscula

Iniciado por m@o_614, 24 Febrero 2013, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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

85

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


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


Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

MeCraniDOS

De minúscula a mayuscula:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <ctype.h>

int main()
{
   char cadena[50];
   int i;
   
   printf("\nEscribe un letra o frase: ");
   scanf("%s", &cadena);
   
   for(i = 0; cadena[i]; i++)
      cadena[i] = toupper(cadena[i]);

   printf("\n%s\n", cadena);

    fflush(stdin);
    printf("\nPresiona Intro para finalizar...");
    getchar();
}


De mayúscula a minuscula:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <ctype.h>

int main()
{
   char cadena[50];
   int i;
   
   printf("\nEscribe un letra o frase: ");
   scanf("%s", &cadena);
   
   for(i = 0; cadena[i]; i++)
      cadena[i] = tolower(cadena[i]);

   printf("\n%s\n", cadena);

    fflush(stdin);
    printf("\nPresiona Intro para finalizar...");
    getchar();
}


Espero que te sirva  ::) ::)

Saludos.
"La física es el sistema operativo del Universo"
     -- Steven R Garman

leosansan

Cita de: 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
.................................................................................


¿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 (cpp) [Seleccionar]
#include <stdio.h>

int main(){
  char ch;
  printf("\nEscribe una letra: ");
  ch=getchar ();
  if (ch>97 || ch<122)
  ch-=32;
  printf("\n%c\n", ch);
  return 0;
}



Saluditos!.

rir3760

Algunos comentarios sobre la función:
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;
}


* No es una buena idea utilizar una macro como esta:
#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:
bool SonLetras(const char *str)
{
   char abc[] = {
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      "abcdefghijklmnopqrstuvwxyz"
   };
   size_t num_chars = sizeof abc - 1;
   size_t i;
   size_t j;
   
   for (i = 0; str[i] != '\0'; i++){
      abc[num_chars] = str[i];
     
      for (j = 0; abc[j] != str[i]; j++)
         ;
      if (j == num_chars)
         return false;
   }
   
   return true;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Stakewinner00

jugando con los
#define
creo que podrías hacer algo como
#define A a
#define B b
#define C c


o algo así sin necesidad de mucho codigo.

leosansan

Cita de: Stakewinner00 en 25 Febrero 2013, 19:31 PM
jugando con los
#define
creo que podrías hacer algo como
#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!.

x64core

Son tan divertidos  ;-)
Cita de: Stakewinner00 en 25 Febrero 2013, 19:31 PM
jugando con los
#define
creo que podrías hacer algo como
#define A a
#define B b
#define C c


o algo así sin necesidad de mucho codigo.

Stakewinner00

Retiro todo lo dicho, ahora ya con la mente más lúcida vi que no puede funcionar (como mínimo de forma sencilla).

Josemanu90