Lower case to upper case – An interesting fact

Problem: Given a string containing only lowercase letters, generate a string with the same letters, but in uppercase.

Input : GeeksForGeeks
Output : GEEKSFORGEEKS 

The first method that comes to our mind is

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to convert a string to uppercase
#include <iostream>
using namespace std;
  
// Converts a string to uppercase
string to_upper(string &in)
{
    for (int i = 0; i < in.length(); i++)
          if ('a' <= in[i] <= 'z')
              in[i] = in[i] - 'a' + 'A';
    return in;
}
  
// Driver code
int main()
{
   string str = "geeksforgeeks";
   cout << to_upper(str);
   return 0;
}

chevron_right


Output :



GEEKSFORGEEKS

A more interesting solution, on the other hand, would be:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to convert a string to uppercase
#include <iostream>
using namespace std;
  
// Converts a string to uppercase
string to_upper(string &in)
{
    for (int i = 0; i < in.length(); i++)
          if ('a' <= in[i] <= 'z')
              in[i] &= ~(1 << 5);
    return in;
}
  
// Driver code
int main()
{
   string str = "geeksforgeeks";
   cout << to_upper(str);
   return 0;
}

chevron_right


Output :

GEEKSFORGEEKS

Explanation: The ASCII table is constructed in such way that the binary representation of lowercase letters is almost identical of binary representation of uppercase letters. The only difference is the sixth bit, setted only for lowercase letters. What that elegant function does is unset the bit of index 5 of in[i], consequently, making that character lowercase.

Disadvantages:
That strategy works only for alphabetical characters. If the input contains numbers or punctuations, we’ll have to use the naive way.

Example:
Character ‘A’ is integer 65 = (0100 0001)2, while character ‘a’ is integer = 97 = (0110 0001)2. (Note that 97 – 65 = 32. Can you guess why?)

Exercises:

  1. Write a function to make all letters of a string lowercase. Example: GeeksForGeeks turns geeksforgeeks.
  2. Write a function that change the case of a string. Example: GeeksForGeeks turns gEEKSfORgEEKS.

This article is contributed by Igor Carpanese. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.