Solution: First we reverse the entire string and then reverse each word of this reversed string.
"Hello World"
|
reverse
|
v
"dlroW olleH"
| |
reverse reverse
| |
v v
"World Hello"
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] == '\0') // boundary or end of the string
{
wordEndIndex = currentIndex;
reverse(str, wordBeginIndex, wordEndIndex);
wordBeginIndex = currentIndex + 2;
}
currentIndex++;
}
}
No comments:
Post a Comment