Changing the case (lower, upper) of Strings

In this article, we will be designing two functions to change the case of strings.
One would change a string from lower case to upper case while the other would
do the opposite.


Although we have pre-defined functions for doing this in a header file, but
this article is for those who dare to know how all these operations are done
internally.


Changing the case: How is it done?


The main theory lies in the way C++ treats character constants and strings.
Have a look at the following code:


  #include<iostream.h>

void main(void)
{
char first='A';
char second=65;

cout<<first;
cout<<endl;

cout<<second;
cout<<endl;
}

whose output is:


   A
A
Press any key to continue

This is because ‘A’ and its ASCII code 65 are equivalent to the
compiler and in c++ we can manipulate it in whatever way we like.


Now look at the following code:


  #include<iostream.h>

void main(void)
{
char arr[4]="ABC";
char arr2[4]={65,66,67};

cout<<arr;
cout<<endl;

cout<<arr2;
cout<<endl;
}

Whose output is (yeah you guessed it right!):


   ABC
ABC
Press any key to continue

So this proves that strings can also be expressed (manipulated) by ASCII codes.


ASCII code of some characters:


   A: 65    a: 97
B: 66 b: 98
C: 67 c: 99
… …
… …

From the above, we can conclude that by increasing or decreasing the ASCII
codes of a character by 32, we can change its case. Just as shown in the following
code:


  #include<iostream.h>

void main(void)
{
char chr='A';
char chr2='b';

cout<<chr;
cout<<endl;

chr=chr + 32;
cout<<chr;
cout<<endl<<endl;

cout<<chr2;
cout<<endl;

chr2=chr2 - 32;
cout<<chr2;
cout<<endl;
}

OUTPUT:


   A
a

b
B
Press any key to continue

This theory can also be applied to strings.


Now, that you know the main theory behind we can jump straight to the example
program to illustrate all this:


Keep reading the comments though!


  // C++ example program to show
// how case(uppercase and lowercase)
// of strings can be changed from
// one to the other
#include<iostream.h>

void to_upper(char *);
void to_lower(char *);

void main(void)
{
char str[50]="I Love C++. The number 1 language!";

to_upper(str);
cout<<str;

to_lower(str);
cout<<endl;
cout<<str;

cout<<endl;
}

// takes a character array
// as argument and changes
// it to upper case
// NOTE: special symbols and
// numbers remains the same
void to_upper(char *str)
{
// while end of the string
// has not been reached
while(*str!='\0')
{
// change only if its a
// lower case character
// intelligent enough not to
// temper with special
// symbols and numbers
if(*str>=97 && *str<=122)
*str-=32;

str++;
}
}

// takes a character array
// as argument and changes
// it to lower case
// NOTE: special symbols and
// numbers remains the same
void to_lower(char *str)
{
while(*str!='\0')
{
// change only if its a
// UPPER case character
// intelligent enough not to
// temper with special
// symbols and numbers
if(*str>=65 && *str<=90)
*str+=32;

str++;
}
}

Good-Bye!

Check out this stream