Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: doommachine en Abril 03, 2015, 04:25:52 am

Título: ¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: doommachine en Abril 03, 2015, 04:25:52 am
Hola a todos, Necesito  convertir los caracteres de una string que esten en mayuscula en minusculas, ¿alguien conoce algun metodo?

Estoy haciendo algo parecido a una base de datos y necesito eso para realizar busquedas de palabras o frases, y poder compararlas para buscar coinsidencias sin que las mayusculas o minusculas sean un problema  Saludos.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: kid_goth en Abril 03, 2015, 04:47:24 am
Código: C
  1. for(int i = 0; palabra[i]; i++){
  2.   palabra[i] = tolower(palabra[i]);
  3. }

esto quizá te sirva :)
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: StackOverflow en Abril 03, 2015, 05:11:52 am
También se puede hacer con el código ASCII.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: Krakakanok en Abril 03, 2015, 12:29:36 pm
También se puede hacer con el código ASCII.

Por poderse se puede, pero si el lenguaje te da una opción para hacerlo, mejor será utilizar ese método. Salvo que se especifique que no se puede usar.

Saludos.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: StackOverflow en Abril 03, 2015, 11:50:57 pm
También se puede hacer con el código ASCII.

Por poderse se puede, pero si el lenguaje te da una opción para hacerlo, mejor será utilizar ese método. Salvo que se especifique que no se puede usar.

Saludos.

Bueno, si depende de los requerimientos, pero no sé que opción sea más eficiente, porque a fin de cuentas ambas opciones son funciones.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: ravenheart en Abril 05, 2015, 09:39:27 pm
no sé que opción sea más eficiente
La opción de no escribir código es mejor siempre que no tengas una razón concreta para escribirlo. Y cuando la tienes también, en la mayoría de los casos.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: Calantra en Abril 06, 2015, 10:08:07 pm
Código: C
  1. for(int i = 0; palabra[i]; i++){
  2.   palabra[i] = tolower(palabra[i]);
  3. }

esto quizá te sirva :)
Esto también puede ser:

Código: C
  1. for(int i = 0; palabra[i]; i++) palabra[i] += 32;

y otra más, como la anterior, pero más sofisticada XD :

Código: C
  1. for(int i = 0; palabra[i]; i++)palabra[i] =palabra[i] | 32;
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: ravenheart en Abril 06, 2015, 11:22:22 pm
Código: C
  1. for(int i = 0; palabra[i]; i++) palabra[i] += 32;
Código: C
  1. for(int i = 0; palabra[i]; i++)palabra[i] =palabra[i] | 32;

Esas funcionan si es una palabra (solo letras sin acentos), pero no para símbolos de puntuación.
Más general, aunque tampoco es una muy buena opción:

Código: [Seleccionar]
char c = palabra[i];
if (c >= 'A' && c <= 'Z')
    c += ('a' - 'A');
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: Calantra en Abril 08, 2015, 11:13:55 pm
Esas funcionan si es una palabra (solo letras sin acentos), pero no para símbolos de puntuación.
Supongo que te refieres a comas y puntos, por que con mayúsculas y minúsculas acentuadas sí debería funcionar.
Para omitir el resto de símbolos creo que basta con hacer esto :
Código: C
  1. for(int i = 0; palabra[i]; i++) (palabra[i] | 191) < 255? : palabra[i] +=32;
Salu2.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: ravenheart en Abril 10, 2015, 09:23:58 am
No hay ninguna garantía de que funcione. Por ejemplo, en UNICODE canónico, que la letra y su acento vienen como caracteres separados, no funcionaría porque se modificaría el acento.

Citar
Código: [Seleccionar]
for(int i = 0; palabra[i]; i++) (palabra[i] | 191) < 255? : palabra[i] +=32;
¿Qué se supone que hace ese código? Me parece que falta algo. De todos modos estoy bastante seguro de que afecta a muchos caracteres que no son letras.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: Calantra en Abril 10, 2015, 12:44:47 pm
No hay ninguna garantía de que funcione. Por ejemplo, en UNICODE canónico, que la letra y su acento vienen como caracteres separados, no funcionaría porque se modificaría el acento.

No lo sabía.

Citar
Código: [Seleccionar]
for(int i = 0; palabra[i]; i++) (palabra[i] | 191) < 255? : palabra[i] +=32;
¿Qué se supone que hace ese código? Me parece que falta algo. De todos modos estoy bastante seguro de que afecta a muchos caracteres que no son letras.

Usa un OR para poner todos los bits del caracter a uno, menos con el bit nº 1. Si el mencionado bit es 1 el resultado de la operación será 255, de lo contrario sera menor. Desde el código de caracter decimal 65 (A) hasta el 122(z) todos tienen en común que el bit 1 es 0.  Utilizo un operador ternario, le paso la operación de la suma de bits que describo antes, dependiendo del resultado(<255) no hará nada  o(=255) sumará 32 (OR 1 al bit 2 ) al caracter, adquiriendo este el valor del mismo en minúsculas.
Afectará a todos aquellos caracteres cuyo bit 1 sea 1 (por ejemplo {, } ), no se si alguno más, probablemente sí.

Salu2.
Título: Re:¿Alguien conoce un metodo para volver caracteres en mayuscula a minuscula en C?
Publicado por: ravenheart en Abril 10, 2015, 08:41:27 pm
No sabía que se pudiera usar así el operador ternario. Creo que en C# es obligatorio rellenar los dos parámetros, y devolver algo. Tengo que probarlo.