Problem: Reverse the words in a sentence. For example "Reversed Words" should become "Words Reversed". Comment: This is one of most frequently asked interview questions on string manipulation.

Solution: First we reverse the entire string and then reverse each word of this reversed string.

Reverse

Code:
void reverse(char str[], int beginIndex, int endIndex)
{
  while(beginIndex < endIndex) // keep swaping characters as long as
                               // begin index is less than end index
  {
     // swap the characters
     char temp = str[beginIndex]; 
     str[beginIndex] = str[endIndex];
     str[endIndex] = temp;

     beginIndex++; //increment the begin index
     endIndex--; //decrememnt the end index
  }
}

void reverse_words(char str[])
{
  reverse(str, 0, strlen(str)-1);
  int currentIndex = 0;
  int wordBeginIndex = 0;
  int wordEndIndex = -1;

  while(str[currentIndex])
  {
     if(str[currentIndex + 1] == ' '  // if we are at the word
        || str[currentIndex + 1] == '') // boundary or end of the string
     {
        wordEndIndex = currentIndex;
        reverse(str, wordBeginIndex, wordEndIndex);
        wordBeginIndex = currentIndex + 2;
     }
     currentIndex++;
  }
}

END