Programa para invertir palabras en una string dada en C++

Dada una oración en forma de string str , la tarea es invertir cada palabra de la oración dada en C++. 
Ejemplos: 
 

Entrada: str = “el cielo es azul” 
Salida: azul es el cielo
Entrada: str = “Me encanta programar” 
Salida: programar me encanta 
 

Método 1: Usar funciones STL 
 

  1. Invierta la string str dada usando la función STL reverse() .
  2. Repita la string invertida y cada vez que se encuentre un espacio, invierta la palabra antes de ese espacio usando la función STL reverse() .

A continuación se muestra la implementación del enfoque anterior:
 

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;
}
Producción

code this like I

Complejidad temporal: O(n 2

Espacio Auxiliar: O(1)

Método 2: sin usar la función incorporada : podemos crear la función inversa() que se usa para invertir la string dada. A continuación se muestran los pasos: 
 

  1. Inicialmente invierta cada palabra de la string dada str.
  2. Ahora invierta toda la string para obtener la string resultante en el orden deseado.

A continuación se muestra la implementación del enfoque anterior:
 

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;
}
Producción

code this like I

Tiempo Complejidad:  O(n 2
Espacio Auxiliar: O(1) 

Método – 3: sin usar espacio adicional

La tarea anterior también se puede lograr dividiendo e intercambiando directamente la string comenzando desde el medio. Como se trata de un intercambio directo, también se consume menos espacio.

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
Producción

practice of lot a needs coding at good getting

Complejidad de tiempo: O(n) 

Espacio Auxiliar: O(n)

Publicación traducida automáticamente

Artículo escrito por AashalKamdar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *