Example: Input: "prodevelopertutorial is a good website", Output: " website good a is prodevelopertutorial".
The solution is as follows:
Step 1: Reverse the whole string.
Step 2: Reverse individual words in the string.
Along with the above 2 steps, we need to remove leading and trailing spaces, and extra spaces in between the words.
Solution in C++
#include<iostream> #include<string.h> #include<algorithm> using namespace std; void reverseWords(string &str) { int start = 0; int i = 0; cout<<"\n\n============debugging logs start==========="; //remove leading space while( str[i] == ' ') str.erase(i, 1); cout<<"\nStep 1 after removing leading space = "<<str<<endl; //reverse words reverse(str.begin(), str.end()); cout<<"Step 2 after reversing the words = "<<str<<endl; //remove trailing zeros while( str[i] == ' ') str.erase(i, 1); cout<<"Step 3 after trailing zeros= "<<str<<endl; int size = str.size(); for(i = 0; i < size - 1; i++) { //check if you encounter a space. // if you encounter a space, then it is a word, reverse the word. if( str[i] == ' ') { if( i == start ) { // if there is more than one space between two words, remove extra space str.erase(i--,1); size--; cout<<"Step 4 removing extra space between words = "<<str<<endl; } else { // reverse word. reverse(str.begin()+start, str.begin()+i); start = i+1; cout<<"Step 5 reversing single word = "<<str<<endl; } } } // reverse the last word. reverse(str.begin() + start, str.end()); cout<<"Step 6 reversing last word = "<<str<<endl; cout<<"============debugging logs end===========\n\n"<<endl; } int main() { string str = " Hello world from prodevelopertutorial.com "; cout<<"\nOriginal string = "<<endl; cout<<"\""<< str <<"\""; reverseWords(str); cout<<"String after reversing words = "<<endl; cout<<str<<endl; return 0; }
Output:
Original string = " Hello world from prodevelopertutorial.com " ============debugging logs start=========== Step 1 after removing leading space = Hello world from prodevelopertutorial.com Step 2 after reversing the words = moc.lairotutrepolevedorp morf dlrow olleH Step 3 after trailing zeros= moc.lairotutrepolevedorp morf dlrow olleH Step 5 reversing single word = prodevelopertutorial.com morf dlrow olleH Step 4 removing extra space between words = prodevelopertutorial.com morf dlrow olleH Step 4 removing extra space between words = prodevelopertutorial.com morf dlrow olleH Step 4 removing extra space between words = prodevelopertutorial.com morf dlrow olleH Step 5 reversing single word = prodevelopertutorial.com from dlrow olleH Step 4 removing extra space between words = prodevelopertutorial.com from dlrow olleH Step 4 removing extra space between words = prodevelopertutorial.com from dlrow olleH Step 5 reversing single word = prodevelopertutorial.com from world olleH Step 4 removing extra space between words = prodevelopertutorial.com from world olleH Step 4 removing extra space between words = prodevelopertutorial.com from world olleH Step 4 removing extra space between words = prodevelopertutorial.com from world olleH Step 6 reversing last word = prodevelopertutorial.com from world Hello ============debugging logs end=========== String after reversing words = prodevelopertutorial.com from world Hello