#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
char* invertir_palabras(char*);
void app_main() {
char test1[] = "Universidad Autonoma de Baja California";
char test2[] = "Facultad de Ciencias Quimicas e Ingenieria";
char test3[] = "Ingeniero en Computacion";
char test4[] = "Sistemas Embebidos 2025-1";
char test5[] = "Cadenas en lenguaje C";
printf("Cadenas iniciales: \n");
printf(" %s\n %s\n %s\n %s\n %s\n", test1, test2, test3, test4, test5);
printf("Cadenas resultantes: \n");
printf(" %s\n %s\n %s\n %s\n %s\n",
invertir_palabras(test1),
invertir_palabras(test2),
invertir_palabras(test3),
invertir_palabras(test4),
invertir_palabras(test5));
while (true) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
/* Esta funcion invierte el orden de las palabras en un string
Entrada: Un string.
Salida: El string con las palabras invertidas. */
char* invertir_palabras(char *str) {
if (str == NULL) return str;
char *str_cpy = (char*) malloc((strlen(str)+1)*sizeof(char));
strcpy(str_cpy, str);
strcpy(str, "");
char* ultmo_espacio = strrchr(str_cpy, ' ');
while (ultmo_espacio != NULL) {
strcat(str, ultmo_espacio+1);
strcat(str, " ");
*ultmo_espacio = '\0';
str_cpy = (char*) realloc(str_cpy, (strlen(str_cpy)+1)*sizeof(char));
ultmo_espacio = strrchr(str_cpy, ' ');
}
strcat(str, str_cpy);
free(str_cpy);
return str;
}