De minúscula a mayúscula a nivel de bits en lenguaje C.

Iniciado por DanielPy, 31 Diciembre 2013, 00:42 AM

0 Miembros y 3 Visitantes están viendo este tema.

rir3760

Cita de: DanielC# en 31 Diciembre 2013, 14:38 PMsolo me encontré con algo que no puedo resolver (en mayúscula).
El problema se debe a la conversión del espacio en "Roberto Daniel", este se sustituye por el carácter '\0' y es la causa de que solo se imprime la primera palabra.

Para solucionarlo solo debes convertir los caracteres alfabéticos, esa verificación la puedes realizar con la función isalpha (prototipo en <ctype.h>).

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

DanielPy

Hola ivancea96.
Ok, funciona a la perfección y complementándolo con lo de xiruko tengo todo resuelto (igual lo de xiruko no se le puede cambiar nada), además me da mucha satisfacción cuando el código es extremadamente conciso, feliz 2014.-
Hola rir3760, muchas gracias por el aporte, feliz 2014.-


feliz 2014 para todos.
Saludos.
Daniel

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

leosansan

#12
Cita de: xiruko en 31 Diciembre 2013, 03:58 AM
...................................
Pensándolo un poco mejor también se podría hacer con máscaras y operaciones a nivel de bit.
Felices fiestas.
......................................

Sólo le veo un pero a lo que haces: modificas la cadena. Y si tuviera que usarla a posteriori no le valdría, a no ser que haga una copia previa de la cadena.  Es una chorrada, ¡¡pero!!, podría ser.

Lo que yo propongo es cuasi-igual, sólo que no modifico la cadena original tan solo la imprimo y paso de la variable "len" ya que se puede evitar su uso.

Salida:


Citar
L -> mayuscula
e -> minuscula
o -> minuscula
S -> mayuscula
a -> minuscula
n -> minuscula
S -> mayuscula
a -> minuscula
n -> minuscula
 -> minuscula
L -> mayuscula
e -> minuscula
o -> minuscula
N -> mayuscula

En mayusculas: LEOSANSAN LEON

En minusculas: leosansan leon



Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
char  cadena[]="LeoSanSan LeoN";
int i;
for (i=0; cadena[i]; i++)
if( cadena[i] & 0x20 )
printf("%c -> minuscula\n", cadena[i]);
else
printf("%c -> mayuscula\n", cadena[i]);

printf("\nEn mayusculas: ");
for (i=0; cadena[i]; i++)
printf("%c", cadena[i]& 0xDF);
putchar ('\n');
printf("\nEn minusculas: ");
for (i=0; cadena[i]; i++)
printf("%c", cadena[i]| 0x20);
   putchar ('\n');
return 0;
}


;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!

P.D: Por ciero, ¿Daniel, Roberto o Pino1952 ?


DanielPy

Hola leosansan.-
Amigo, muy bien otra muy buena idea, excelente.-

CitarP.D: Por ciero, ¿Daniel, Roberto o Pino1952 ?
Me llaman Roberto Daniel Virgili(Dani para las chicas menores de 30)y el seudónimo Pino1952 es también mio, la intriga es porque frecuentas ese foro, espero urgente respuesta... :huh: :huh: :huh: :) :) :)
     
Saludos.
Daniel

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

leosansan

#14
Cita de: DanielC# en 31 Diciembre 2013, 22:55 PM
........................................................
la intriga es porqué frecuentas ese foro, espero urgente respuesta... :huh: :huh: :huh: :) :) :)
   
Saludos.
Daniel


¿Es que crees que este es el único foro con acción?. Pues no, pero sin dudarlo un instante:es el más activo y entretenido. Se aprende un *uevo. ;) ;) ;)

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!



DanielPy

Hola amigos.
Bueno el caso es que ahora necesito que me digan cómo seguir,  ¿como paso el nuevo binario a la "d"  para que se transforme en "D"?.-
Los código que Uds. expusieron no tienen desperdicio pero después de tanta información suelo hacer mi propia versión para practicar y asimilar lo expuesto.-
ivancea96, ya que no puedo lograrlo espero que hagas un esfuerzo para refinar tú código me da resultados inesperados (ver imagen), lo necesito para hacer mi programa más conciso, no tener que poner el resultado binario en una cadena y luego pasarlo a entero.-



Espero que se entienda lo expuesto en la primer parte, es lo que me falta para pasar de "daniel" a "Daniel".-     


#include<stdio.h>
#include <stdlib.h>
 
void binarioConvertir(int, char[]);
 
int main(void){
 
    char cadena[6] = "daniel", cad_binaria[8] = "";
    int ascii=0, i=0, binarioMayuscula=0;
   
    while(i<6){
        ascii = cadena[i];
        binarioConvertir(ascii,cad_binaria);     
        printf("\n La letra %c en decimal %3d en binario %s", cadena[i], ascii, cad_binaria);
        cad_binaria[1] = '0';
        printf(" mayuscula --> %s", cad_binaria);
        binarioMayuscula = atoi(cad_binaria);
i++;
    }   
    printf("\n\n"); 

    return 0;
}
 
void binarioConvertir(int num, char cad[]){
    int i=0, izq=0, der=0, aux=0;
    while(num>0){
        if(num%2 == 0)
            cad[i] = '0';
        else
            cad[i] = '1';
        num = num/2;
        i++;
    }
    der=6;
    while(izq<3){
        aux      = cad[izq];
        cad[izq] = cad[der];;
        cad[der] = aux;
        der--;
        izq++;
    }
    cad[7] = '\0';
}


Saludos.
Daniel   

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

ivancea96

Bueno, en priemr lugar, es eno es mi código -.-'
En segundo lugar, a mi me da resultados correctos.

DanielPy

Hola ivancea96.
Ese no es el del error, el que dejo a continuación es el que me da resultados incorrectos, es obvio que es mío el error pero no logro corregirlo.-

#include <stdio.h>
#include <math.h>
     
void binario(int);
     
int main(void){
     
char cadena[6] = "daniel";
int ascii=0, i=0;
     
while(i<6){
ascii = cadena[i];
printf("\n La letra %c en decimal %3d en binario ", cadena[i], ascii);
binario(ascii);
i++;
}
     
printf("\n\n");
     
return 0;
}
     
void binario(int num){
int temp=0, i;
for(i=0; num>0; i++){
temp+=(num%2) * pow(10, i);
num/=2;
}
printf(" %d", temp);
}


Saludos.
Daniel   


abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

ivancea96


DanielPy

Hola.
Una última cosa, ¿copiaste y pegaste el código que yo postee?.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-