es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentra palabras palíndromas en una cadena y luego réescribelas en C.

¡Hola! ¿Cómo puedo escribir un código en C que verifique si una cadena es un palíndromo y luego la reescriba?
Por ejemplo: la cadena “awbiue abdba aebto leoel”, debería devolver “abdba leoel”.

Escribí este código, pero solo puede encontrar si la cadena es un palíndromo o no:

#include<stdlib.h>
#include<string.h>

int main()
{
char str[100];

printf("Introduce la cadena: ");
gets(str);
 int f=1;

{

for(int i=0;i<strlen(str); i++)
{
    if(str[i]!=str[strlen(str)-i-1])
    {
        f=0;  break;
    }
}
if(f==1)
    printf("Palíndromo");
else
    printf("No es un palíndromo");}
return 0;
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para reescribir las palabras palindrómicas, puede modificar el código de la siguiente manera:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char str[100], word[20], output[100];
        int i, j, k, f;
        output[0] = '\0'; // inicializando la cadena de salida como vacía
    
        printf("Ingrese una cadena: ");
        gets(str);
        for (i = 0; i < strlen(str); i++)
        {
            // copiar palabra desde la cadena de entrada
            for (j = i, k = 0; str[j] != ' ' && j < strlen(str); j++, k++)
            {
                word[k] = str[j];
            }
            word[k] = '\0'; // agregar caracter nulo al final para convertirlo en una cadena
    
            // comprobar si la palabra es un palíndromo
            f = 1;
            for (j = 0; j < strlen(word) / 2; j++)
            {
                if (word[j] != word[strlen(word) - j - 1])
                {
                    f = 0;
                    break;
                }
            }
    
            // Si la palabra es un palíndromo, añadirla a la cadena de salida
            if (f == 1)
            {
                strcat(output, word);
                strcat(output, " ");
            }
    
            i = j; // actualizar índice i al inicio de la próxima palabra
        }
    
        printf("Cadena de salida: %s", output);
    
        return 0;
    }
    

    Aquí, primero definimos tres matrices de caracteres: str para tomar la cadena de entrada, word para copiar cada palabra de str una por una y output para almacenar las palabras palindrómicas. Inicializamos output como vacía al principio.

    Luego, usamos dos bucles anidados. El bucle externo recorre cada caracter de la cadena de entrada str. El bucle interno copia la palabra desde str empezando desde el índice actual hasta que se encuentre el siguiente espacio o el fin de la cadena. Una vez que tenemos la palabra, verificamos si es un palíndromo o no usando el mismo código que antes.

    Si la palabra es un palíndromo, la agregamos a la cadena de salida output usando la función strcat(). También agregamos un espacio después de cada palabra para que la cadena de salida tenga los mismos espacios que la cadena de entrada. Por último, actualizamos el índice i para empezar desde la siguiente palabra.

    Después de que los bucles hayan terminado, imprimimos la cadena de salida usando printf().</string.h></stdlib.h></stdio.h>

Comments are closed.