Imprimir palabras de una string en orden inverso

Que haya una string que diga «SOY UN GEEK». Entonces, la salida debería ser «GEEK A AM I». Esto se puede hacer de muchas maneras. Una de las soluciones se da en Palabras inversas en una string .

Ejemplos: 

Input : I AM A GEEK
Output : GEEK A AM I

Input : GfG IS THE BEST
Output : BEST THE IS GfG

Esto se puede hacer de una manera más sencilla usando la propiedad del “ especificador de formato %s ”.
Propiedad : %s obtendrá todos los valores hasta que sea NULL, es decir, ‘\0’. 

Ejemplo: char String[] = “I AM A GEEK” se almacena como se muestra en la siguiente imagen:  

Enfoque: Atraviese la string desde el último carácter y muévase hacia el primer carácter. Mientras atraviesa, si se encuentra un carácter de espacio, coloque un NULL en esa posición e imprima la string restante justo después del carácter NULL. Repita esto hasta que termine el ciclo y cuando finalice el ciclo, imprima la string, el %s realizará la impresión de caracteres hasta que encuentre el primer carácter NULL. 

Veamos el enfoque con la ayuda de diagramas:
paso 1: Recorra desde el último carácter hasta que encuentre un carácter de espacio.  

Paso 2: coloque un carácter NULL en la posición del carácter de espacio e imprima la string después. 

Paso 3: Al final, el ciclo termina cuando llega al primer carácter, así que imprima los caracteres restantes, se imprimirá el primer carácter NULL, por lo tanto, se imprimirá la primera palabra.

Implementación:

C++

// C++ program to print reverse
// of words in a string.
#include <iostream>
 
using namespace std;
 
string wordReverse(string str)
{
    int i = str.length() - 1;
    int start, end = i + 1;
    string result = "";
 
    while (i >= 0) {
        if (str[i] == ' ') {
            start = i + 1;
            while (start != end)
                result += str[start++];
 
            result += ' ';
 
            end = i;
        }
        i--;
    }
    start = 0;
    while (start != end)
        result += str[start++];
 
    return result;
}
 
// Driver code
int main()
{
    string str = "I AM A GEEK";
 
    cout << wordReverse(str);
 
    return 0;
}
 
// This code is contributed
// by Imam

C

// C program to print reverse of words in
// a string.
#include <stdio.h>
#include <string.h>
 
void printReverse(char str[])
{
    int length = strlen(str);
 
    // Traverse string from end
    int i;
    for (i = length - 1; i >= 0; i--) {
        if (str[i] == ' ') {
 
            // putting the NULL character at the
            // position of space characters for
            // next iteration.
            str[i] = '\0';
 
            // Start from next character
            printf("%s ", &(str[i]) + 1);
        }
    }
 
    // printing the last word
    printf("%s", str);
}
 
// Driver code
int main()
{
    char str[] = "I AM A GEEK";
    printReverse(str);
    return 0;
}

Java

// Java program to print reverse
// of words in a string.
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
    static String wordReverse(String str)
    {
        int i = str.length() - 1;
        int start, end = i + 1;
        String result = "";
 
        while (i >= 0) {
            if (str.charAt(i) == ' ') {
                start = i + 1;
                while (start != end)
                    result += str.charAt(start++);
 
                result += ' ';
 
                end = i;
            }
            i--;
        }
 
        start = 0;
        while (start != end)
            result += str.charAt(start++);
 
        return result;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String str = "I AM A GEEK";
 
        System.out.print(wordReverse(str));
    }
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)

Python3

# Python3 program to print reverse
# of words in a string.
 
 
def wordReverse(str):
    i = len(str)-1
    start = end = i+1
    result = ''
 
    while i >= 0:
        if str[i] == ' ':
            start = i+1
            while start != end:
                result += str[start]
                start += 1
            result += ' '
            end = i
        i -= 1
    start = 0
    while start != end:
        result += str[start]
        start += 1
    return result
 
 
# Driver Code
str = 'I AM A GEEK'
print(wordReverse(str))
 
# This code is contributed
# by SamyuktaSHegde

C#

// C# program to print reverse
// of words in a string.
using System;
class GFG {
    static String wordReverse(String str)
    {
        int i = str.Length - 1;
        int start, end = i + 1;
        String result = "";
 
        while (i >= 0) {
            if (str[i] == ' ') {
                start = i + 1;
                while (start != end)
                    result += str[start++];
 
                result += ' ';
 
                end = i;
            }
            i--;
        }
 
        start = 0;
        while (start != end)
            result += str[start++];
 
        return result;
    }
 
    // Driver code
    public static void Main()
    {
        String str = "I AM A GEEK";
 
        Console.Write(wordReverse(str));
    }
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)

PHP

<?php
// PHP program to print reverse
// of words in a string
function wordReverse($str)
{
    $i = strlen($str) - 1;
    $end = $i + 1;
    $result = "";
     
    while($i >= 0)
    {
        if($str[$i] == ' ')
        {
            $start = $i + 1;
            while($start != $end)
                $result = $result . $str[$start++];
             
            $result = $result . ' ';
             
            $end = $i;
        }
        $i--;
    }
    $start = 0;
    while($start != $end)
        $result = $result . $str[$start++];
     
    return $result;
}
 
// Driver code
$str = "I AM A GEEK";
echo wordReverse($str);
 
// This code is contributed by ita_c
?>

Javascript

<script>
 
// Javascript program to print reverse
// of words in a string.
function wordReverse(str)
{
    var i = str.length - 1;
    var start, end = i + 1;
    var result = "";
     
    while (i >= 0)
    {
        if (str[i] == ' ')
        {
            start = i + 1;
            while (start != end)
                result += str[start++];
             
            result += ' ';
            end = i;
        }
        i--;
    }
    start = 0;
     
    while (start != end)
        result += str[start++];
     
    return result;
}
 
// Driver code
var str = "I AM A GEEK";
 
document.write(wordReverse(str));
 
// This code is contributed by rutvik_56
 
</script>
Producción

GEEK A AM I

Complejidad de tiempo: O(len(str))
Espacio auxiliar: O(len(str))

Sin utilizar ningún espacio extra:

Recorra la string y refleje cada palabra en la string, luego, al final, refleje la string completa.

Implementación: el siguiente código C++ puede manejar varios espacios contiguos.

C++

#include <algorithm>
#include <iostream>
#include <string>
 
using namespace std;
 
string reverse_words(string s)
{
    int left = 0, i = 0, n = s.length();
    while (s[i] == ' '){
    i++;
    }
 
    left = i;
 
    while (i < n)
    {
    if (i + 1 == n || s[i] == ' ')
    {
        int j = i - 1;
        if (i + 1 == n)
        j++;
       
        reverse(s.begin()+left, s.begin()+j+1);
 
        left = i + 1;
    }
    if (left < n && s[left] == ' ' && i > left)
        left = i;
 
    i++;
    }
    // reversing the string
    reverse(s.begin(), s.end());
 
    return s;
}
 
int main()
{
 
    string str = "I AM A GEEK";
 
    str = reverse_words(str);
 
    cout << str;
 
    return 0;
// This code is contributed
// by Gatea David
}

Java

/*package whatever //do not write package name here */
import java.io.*;
 
class GFG {
  static String reverse_words(String s)
  {
    int left = 0, i = 0, n = s.length();
    while (s.charAt(i) == ' '){
      i++;
    }
 
    left = i;
 
    while (i < n)
    {
      if (i + 1 == n || s.charAt(i) == ' ')
      {
        int j = i - 1;
        if (i + 1 == n)
          j++;
 
        while (left<n && j<n && left < j){
          char ch[] = s.toCharArray();
          char temp = ch[left];
          ch[left] = ch[j];
          ch[j] = temp;
          s = String.valueOf(ch);
          left++;
          j--;
        }
 
        left = i + 1;
      }
      if (left < n && s.charAt(left) == ' ' && i > left)
        left = i;
 
      i++;
    }
    // reversing the string
    char ch[] = s.toCharArray();
    int len = s.length();
    for (i=0; i < (len/2); i++)
    {
      char temp = ch[i];
      ch[i] = ch[len - i - 1];
      ch[len - i- 1] = temp;
    }
    s = String.valueOf(ch);
 
    return s;
  }
 
  public static void main(String args[])
  {
    String str = "I AM A GEEK";
    str = reverse_words(str);
    System.out.println(str);
  }
}
 
// This code is contributed by shinjanpatra.

Python3

# Python code for the same approach
def reverse_words(s):
 
    left, i, n = 0, 0, len(s)
 
    while (s[i] == ' '):
        i += 1
 
    left = i
 
    while (i < n):
 
        if (i + 1 == n or s[i] == ' '):
         
            j = i - 1
            if (i + 1 == n):
                j += 1
         
            while (left < j):
                s = s[0:left] + s[j] + s[left+1:j] + s[left] + s[j+1:]
             
                left += 1
                j -= 1
         
            left = i + 1
         
        if (i > left and s[left] == ' '):
            left = i
 
        i += 1
 
    s = s[::-1]
 
    return s
 
# driver code
Str = "I AM A GEEK"
Str = reverse_words(Str)
print(Str)
 
# This code is contributed by shinjanpatra

C#

// C# program to print reverse
// of words in a string.
using System;
 
class GFG {
    static String reverse_words(String s)
    {
        var left = 0;
        var i = 0;
        var n = s.Length;
        while (s[i] == ' ') {
            i++;
        }
        left = i;
        while (i < n) {
            if (i + 1 == n || s[i] == ' ') {
                var j = i - 1;
                if (i + 1 == n) {
                    j++;
                }
                while (left < n && j < n && left < j) {
                    char[] ch = s.ToCharArray();
                    var temp = ch[left];
                    ch[left] = ch[j];
                    ch[j] = temp;
                    s = new string(ch);
                    left++;
                    j--;
                }
                left = i + 1;
            }
            if (left < n && s[left] == ' ' && i > left) {
                left = i;
            }
            i++;
        }
        // reversing the string
        int len = s.Length;
        char[] chh = s.ToCharArray();
        for (i = 0; i < (len / 2); i++) {
            char temp = chh[i];
            chh[i] = chh[len - i - 1];
            chh[len - i - 1] = temp;
        }
        s = new string(chh);
        return s;
    }
    public static void Main(String[] args)
    {
        string str = "I AM A GEEK";
        str = reverse_words(str);
        Console.WriteLine(str);
    }
}
 
// This code is contributed by Aarti_Rathi

Javascript

<script>
 
// JavaScript code for the approach
 
function reverse_words(s)
{
    let left = 0, i = 0, n = s.length;
 
    while (s[i] == ' ')
        i++;
 
    left = i;
 
    while (i < n)
    {
        if (i + 1 == n || s[i] == ' ')
        {
            let j = i - 1;
            if (i + 1 == n)
                j++;
            let temp;
            let a = s.split("");
            while (left < j){
                temp = a[left];
                a[left] = a[j];
                a[j] = temp;
                left++;
                j--;
            }
            s = a.join("");
         
            left = i + 1;
        }
        if (s[left] == ' ' && i > left)
            left = i;
     
        i++;
    }
    s = s.split('').reverse().join('');
    return s;
}
 
// driver code
 
let str = "I AM A GEEK";
 
str = reverse_words(str);
 
document.write(str);
 
// This code is contributed by shinjanpatra
 
</script>
Producción

GEEK A AM I

Complejidad de tiempo: O(len(str))
Espacio auxiliar: O(1)

Este artículo es una contribución de MAZHAR IMAM KHAN . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *