Alternar entre mayúsculas y minúsculas de una string mediante operadores bit a bit

Dada una string, escriba una función que devuelva alternar entre mayúsculas y minúsculas de una string utilizando los operadores bit a bit en su lugar.
En los códigos ASCII , el carácter ‘A’ es el número entero 65 = (0100 0001)2, mientras que el carácter ‘a’ es el número entero 97 = (0110 0001)2. De manera similar, el carácter ‘D’ es el número entero 68 = (0100 0100)2, mientras que el carácter ‘d’ es el número entero 100 = (0110 0100)2.

Como podemos ver, solo el sexto bit menos significativo es diferente en el código ASCII de ‘A’ y ‘a’. Se puede ver un comportamiento similar en el código ASCII de ‘D’ y ‘d’. Por lo tanto, necesitamos alternar este bit para alternar entre mayúsculas y minúsculas. 

Ejemplos: 

Input : "GeekSfOrgEEKs"
Output : "gEEKsFoRGeekS"                  

Input : "StRinG"
Output : "sTrINg"

La tabla ASCII está construida de tal manera que la representación binaria de letras minúsculas es casi idéntica a la representación binaria de letras mayúsculas.

Caso de alternancia:

El número entero con 6th LSB como 1 es 32 (0010 0000). Por lo tanto, la operación XOR bit a bit de un carácter con 32 alternará el sexto LSB del carácter y, por lo tanto, alternará su caso. Si el carácter está en mayúsculas, se convertirá a minúsculas y viceversa. 

Implementación:

C++

// C++ program to get toggle case of a string
#include <bits/stdc++.h>
using namespace std;
 
// tOGGLE cASE = swaps CAPS to lower
// case and lower case to CAPS
char *toggleCase(char *a)
{
    for(int i = 0; a[i] != '\0'; i++)
    {
         
        // Bitwise EXOR with 32
        a[i] ^= 32;
    }
    return a;
}
 
// Driver Code
int main()
{
    char str[] = "CheRrY";
    cout << "Toggle case: "
         << toggleCase(str) << endl;
    cout << "Original string: "
         << toggleCase(str) << endl;
    return 0;
}
 
// This code is contributed by noob2000

C

// C program to get toggle case of a string
#include <stdio.h>
 
// tOGGLE cASE = swaps CAPS to lower
// case and lower case to CAPS
char *toggleCase(char *a)
{
    for (int i=0; a[i]!='\0'; i++) {
 
        // Bitwise EXOR with 32
        a[i] ^= 32;
    }
 
    return a;
}
 
// Driver Code
int main()
{
    char str[] = "CheRrY";
    printf("Toggle case: %s\n", toggleCase(str));
    printf("Original string: %s", toggleCase(str));
    return 0;
}

Java

// program to get toggle case of a string
 
public class Test
{
     
    static int x=32;
     
    // tOGGLE cASE = swaps CAPS to lower
    // case and lower case to CAPS
    static String toggleCase(char[] a)
    {
        for (int i=0; i<a.length; i++) {
       
            // Bitwise EXOR with 32
            a[i]^=32;
        }
        return new String(a);
    }
     
    /* Driver program */
    public static void main(String[] args)
    {
        String str = "CheRrY";
        System.out.print("Toggle case: ");
        str = toggleCase(str.toCharArray());
        System.out.println(str);
         
        System.out.print("Original string: ");
        str = toggleCase(str.toCharArray());
        System.out.println(str);   
    }
}

Python3

# Python3 program to get toggle case of a string
x = 32;
 
# tOGGLE cASE = swaps CAPS to lower
# case and lower case to CAPS
def toggleCase(a):
 
    for i in range(len(a)):
 
        # Bitwise EXOR with 32
        a = a[:i] + chr(ord(a[i]) ^ 32) + a[i + 1:];
    return a;
 
# Driver Code
str = "CheRrY";
print("Toggle case: ", end = "");
str = toggleCase(str);
print(str);
 
print("Original string: ", end = "");
str = toggleCase(str);
print(str);
 
# This code is contributed by 29AjayKumar

C#

// C# program to get toggle case of a string
using System;
 
class GFG {
     
    // tOGGLE cASE = swaps CAPS to lower
    // case and lower case to CAPS
    static string toggleCase(char []a)
    {
        for (int i = 0; i < a.Length; i++)
        {
         
            // Bitwise EXOR with 32
            a[i] ^= (char)32;
        }
         
        return new string(a);
    }
     
    /* Driver program */
    public static void Main()
    {
        string str = "CheRrY";
        Console.Write("Toggle case: ");
        str = toggleCase(str.ToCharArray());
        Console.WriteLine(str);
         
        Console.Write("Original string: ");
        str = toggleCase(str.ToCharArray());
        Console.Write(str);
    }
}
 
// This code is contributed by nitin mittal.

Javascript

<script>
// program to get toggle case of a string 
x = 32;
 
// tOGGLE cASE = swaps CAPS to lower
// case and lower case to CAPS
function toggleCase(a)
{
    for (i = 0; i < a.length; i++)
    {
   
        // Bitwise EXOR with 32
        a[i] = String.fromCharCode(a[i].charCodeAt(0)^32);
    }
    return a.join("");;
}
 
/* Driver program */
var str = "CheRrY";
document.write("Toggle case: ");
str = toggleCase(str.split(''));
document.write(str);
 
document.write("<br>Original string: ");
str = toggleCase(str.split(''));
document.write(str); 
 
// This code is contributed by Princi Singh
</script>
Producción

Toggle case: cHErRy
Original string: CheRrY

Complejidad temporal : O(n) 
Espacio auxiliar : O(1)

Gracias a Kumar Gaurav por mejorar la solución.

Artículo similar:  
Conversión de mayúsculas y minúsculas de una string usando operadores BitWise en C/C++

Este artículo es una contribución de Sanjay Kumar Ulsha de JNTUH College Of Engineering, Hyderabad . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *