Programa C para invertir palabras en una string dada

Ejemplo: Deje que la string de entrada sea «me gusta mucho este programa». La función debería cambiar la string a «mucho, muy programe esto como yo»

reverse-words

Ejemplos

Entrada : s  = «código de práctica de prueba de geeks»
Salida : s = «código de práctica de prueba de geeks»

Entrada : s = «ser bueno en la codificación necesita mucha práctica» 
Salida : s = «mucha práctica necesita la codificación en la buena obtención»

Algoritmo :  

  • Inicialmente, invierta las palabras individuales de la string dada una por una, para el ejemplo anterior, después de invertir las palabras individuales, la string debe ser «i ekil siht margorp yrev hcum».
  • Invierta toda la string de principio a fin para obtener el resultado deseado «mucho, programe esto como yo» en el ejemplo anterior.

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

C

// C program to reverse a string
#include <stdio.h>
 
// Function to reverse any sequence
// starting with pointer begin and
// ending with pointer end
void reverse(char* begin,
             char* end)
{
    char temp;
    while (begin < end)
    {
        temp = *begin;
        *begin++ = *end;
        *end-- = temp;
    }
}
 
// Function to reverse words
void reverseWords(char* s)
{
    char* word_begin = s;
 
    // Word boundary
    char* temp = s;
 
    // Reversing individual words as
    // explained in the first step
    while (*temp)
    {
        temp++;
        if (*temp == '')
        {
            reverse(word_begin,
                    temp - 1);
        }
        else if (*temp == ' ')
        {
            reverse(word_begin,
                    temp - 1);
            word_begin = temp + 1;
        }
    }
 
    // Reverse the entire string
    reverse(s, temp - 1);
}
 
// Driver Code
int main()
{
    char s[] =
    "i like this program very much";
    char* temp = s;
    reverseWords(s);
    printf("%s", s);
    return 0;
}

Producción:

much very program this like i

Complejidad de tiempo: O(n)

Espacio Auxiliar: O(n) 

El código anterior no maneja los casos cuando la string comienza con un espacio. La siguiente versión maneja este caso específico y no hace llamadas innecesarias para invertir la función en el caso de múltiples espacios intermedios. Gracias a rka143 por proporcionar esta versión. 

C

// C program to implement
// the above approach
void reverseWords(char* s)
{
    char* word_begin = NULL;
   
    // temp is for word boundary
    char* temp = s;
 
    // STEP 1 of the above algorithm
    while (*temp)
    {
        /*This condition is to make sure
          that the string start with valid
          character (not space) only*/
        if ((word_begin == NULL) &&
            (*temp != ' '))
        {
            word_begin = temp;
        }
        if (word_begin &&
           ((*(temp + 1) == ' ') ||
            (*(temp + 1) == '')))
        {
            reverse(word_begin, temp);
            word_begin = NULL;
        }
        temp++;
    // End of while
    }
 
    // STEP 2 of the above algorithm
    reverse(s, temp - 1);
}

Complejidad de tiempo: O(n) 
Otro enfoque:

Consulte el artículo completo sobre Palabras inversas en una string determinada para obtener más detalles.

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 *