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
- Invierta la string str dada usando la función STL reverse() .
- 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; }
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:
- Inicialmente invierta cada palabra de la string dada str.
- 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; }
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
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