Open In App

Program to reverse words in a given string in C++

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a sentence in the form of string str, the task is to reverse each word of the given sentence in C++. 
Examples: 
 

Input: str = “the sky is blue” 
Output: blue is sky the
Input: str = “I love programming” 
Output: programming love I 
 

 

Method 1: Using STL functions 
 

  1. Reverse the given string str using STL function reverse().
  2. Iterate the reversed string and whenever a space is found reverse the word before that space using the STL function reverse().

Below is the implementation of the above approach:

CPP




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to reverse the given string
string reverseString(string str)
{
 
    // Reverse str using inbuilt function
    reverse(str.begin(), str.end());
 
    // Add space at the end so that the
    // last word is also reversed
    str.insert(str.end(), ' ');
 
    int n = str.length();
 
    int j = 0;
 
    // Find spaces and reverse all words
    // before that
    for (int i = 0; i < n; i++) {
 
        // If a space is encountered
        if (str[i] == ' ') {
            reverse(str.begin() + j, str.begin() + i);
 
            // Update the starting index
            // for next word to reverse
            j = i + 1;
        }
    }
 
    // Remove spaces from the end of the
    // word that we appended
    str.pop_back();
 
    // Return the reversed string
    return str;
}
 
// Driver code
int main()
{
    string str = "I like this code";
 
    // Function call
    string rev = reverseString(str);
 
    // Print the reversed string
    cout << rev;
    return 0;
}


Output

code this like I

Time Complexity: O(n) 
Auxiliary Space: O(1)

Method 2: Without using the inbuilt function: We can create the reverse() function which is used to reverse the given string. Below are the steps: 
 

  1. Initially reverse each word of the given string str.
  2. Now reverse the whole string to get the resultant string in desired order.

Below is the implementation of the above approach: 

CPP




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function used to reverse a string
// from index l to r
void reversed(string& s, int l, int r)
{
 
    while (l < r) {
 
        // Swap characters at l and r
        swap(s[l], s[r]);
        l++;
        r--;
    }
}
 
// Function to reverse the given string
string reverseString(string str)
{
 
    // Add space at the end so that the
    // last word is also reversed
    str.insert(str.end(), ' ');
 
    int n = str.length();
 
    int j = 0;
 
    // Find spaces and reverse all words
    // before that
    for (int i = 0; i < n; i++) {
 
        // If a space is encountered
        if (str[i] == ' ') {
 
            // Function call to our custom
            // reverse function()
            reversed(str, j, i - 1);
 
            // Update the starting index
            // for next word to reverse
            j = i + 1;
        }
    }
 
    // Remove spaces from the end of the
    // word that we appended
    str.pop_back();
 
    // Reverse the whole string
    reversed(str, 0, str.length() - 1);
 
    // Return the reversed string
    return str;
}
 
// Driver code
int main()
{
    string str = "I like this code";
 
    // Function call
    string rev = reverseString(str);
 
    // Print the reversed string
    cout << rev;
    return 0;
}


Output

code this like I

Time Complexity: O(n) 
Auxiliary Space: O(1) 

Method 3: Without Using Extra Space

The above task can also be accomplished by splitting and directly swapping the string starting from the middle. As direct swapping is involved, less space is consumed too.

C++




// C++ code to reverse a string
#include <bits/stdc++.h>
 
using namespace std;
 
// Reverse the string
string RevString(string s[], int l)
{
    // Check if number of words is even
    if (l % 2 == 0) {
        // Find the middle word
        int j = l / 2;
 
        // Starting from the middle
        // start swapping words at
        // jth position and l-1-j position
        while (j <= l - 1) {
            string temp;
            temp = s[l - j - 1];
            s[l - j - 1] = s[j];
            s[j] = temp;
            j += 1;
        }
    }
 
    // Check if number of words is odd
    else {
        // Find the middle word
        int j = (l / 2) + 1;
 
        // Starting from the middle start
        // swapping the words at jth
        // position and l-1-j position
        while (j <= l - 1) {
            string temp;
            temp = s[l - j - 1];
            s[l - j - 1] = s[j];
            s[j] = temp;
            j += 1;
        }
    }
 
    string S = s[0];
 
    // Return the reversed sentence
    for (int i = 1; i < 9; i++) {
        S = S + " " + s[i];
    }
    return S;
}
 
// Driver code
int main()
{
    string s = "getting good at coding "
               "needs a lot of practice";
 
    string words[]
        = { "getting", "good", "at", "coding""needs",
            "a",       "lot""of", "practice" };
 
    cout << RevString(words, 9) << endl;
    return 0;
}
 
// This code is contributed by AJAY MAKVANA


Output

practice of lot a needs coding at good getting

Time Complexity: O(n) 
Auxiliary Space: O(n)

Method 4: Using stringstream and vector

  1. Create a stringstream from the given string.
  2. Create an empty vector to store the words of the sentence.
  3. Read each word from the stringstream and store it in the vector.
  4. Reverse each word in the vector.
  5. Concatenate the reversed words with a space between each word.
  6. Remove the extra space at the end of the concatenated string.
  7. Reverse the entire concatenated string.
  8. Return the reversed sentence.

C++




#include <bits/stdc++.h>
using namespace std;
 
// Function to reverse the words of a sentence
string reverseString(string str)
{
    // Creating a stringstream from given string
    stringstream ss(str);
 
    // Vector to store the words of the sentence
    vector<string> words;
 
    // Temporary variable to store each word
    string temp;
 
    // Reading each word from stringstream
    // and storing it into vector
    while (ss >> temp) {
        words.push_back(temp);
    }
 
    // Reversing each word of the sentence
    for (int i = 0; i < words.size(); i++) {
        reverse(words[i].begin(), words[i].end());
    }
 
    // Concatenating the reversed words
    string rev = "";
    for (int i = 0; i < words.size(); i++) {
        rev += words[i] + " ";
    }
 
    // Removing the extra space at the end
    rev.pop_back();
 
    // Reversing the entire sentence
    reverse(rev.begin(), rev.end());
 
    // Return the reversed sentence
    return rev;
}
 
// Driver code
int main()
{
    string str = "I like this code";
 
    // Function call
    string rev = reverseString(str);
 
    // Print the reversed string
    cout << rev;
 
    return 0;
}
 
// Output: "code this like I"


Output

code this like I

Time complexity is O(n)
Auxiliary space is O(n)



Last Updated : 06 Jul, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads