Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
Intentar invertir una cadena da como resultado una cadena en blanco

Soy novato en C y estoy tratando de hacer alguna función para invertir una palabra, aquí mi código:

 #include <stdlib.h> #include <string.h> // ƒ to revers the word void lettreCount(char *saisi, int length){ int i, j = 0; char revers[length]; for (i = length; i >= 0; --i){ //loop *(revers+j) = saisi[i]; ++j; } printf("%s\n",revers); } int main(){ char text[30]; //Array for text int len; printf("Saisissez le text:\n"); gets(text); len = strlen(text); lettreCount(text, len); }

pero obtengo todo el tiempo solo una cadena vacía en la terminal, ¿cómo debo hacerlo? gracias

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Las cadenas en C terminan con un byte nulo. Entonces, cuando comienza su ciclo con i = length el primer carácter que coloca en la nueva matriz es el byte nulo. Esto significa que tienes una cadena vacía.

Comience su ciclo en length-1 para que comience en el último carácter de la cadena. Luego, después del ciclo, deberá agregar manualmente el byte nulo de terminación a la matriz de destino.

 char revers[length+1]; for (i = length-1; i >= 0; --i){ //loop *(revers+j) = saisi[i]; ++j; } revers[length] = 0;
over 4 years ago · Santiago Trujillo Denunciar

0

¿Nombra todas sus funciones como lettreCount independientemente de lo que estén haciendo? :)

conversión de puntero a entero incompatible strchr

Si una cadena s tiene caracteres de length (el valor devuelto por la función strlen ), la expresión s[length] produce el carácter cero final '\0' . El carácter cero final se escribe como el primer carácter de la nueva cadena en este ciclo for en su primera iteración

 for (i = length; i >= 0; --i){ //loop *(revers+j) = saisi[i]; ++j; }

Como resultado, la matriz de destino contiene una cadena vacía.

La función que crea una cadena invertida de una cadena dada se puede declarar y definir de la siguiente manera

 char * copy_reverse( const char *s ) { size_t n = strlen( s ); char *reversed = malloc( n + 1 ); if ( reversed != NULL ) { reversed[n] = '\0'; for ( char *p = reversed + n; *s; ++s ) { *--p = *s; } } return reversed; }
over 4 years ago · Santiago Trujillo Denunciar

0

Lo primero que debe hacer es copiar el terminador nulo de la cadena en la primera posición de la matriz, por lo que es normal que se imprima como una cadena vacía.

 void lettreCount(char *saisi, int length){ int i, j = 0; char revers[length]; for (i = length; i >= 0; --i){ //loop *(revers+j) = saisi[i];

El primer carácter que copia es saisi[length] --> revers[0] , por lo que coloca un '\0' al comienzo de su cadena.

 void lettreCount(char *saisi, int length){ char revers[length]; int i = length, j = 0; while (--i >= 0) { //loop revers[j++] = saisi[i]; } /* you need to end the string */ revers[j] = '\0'; printf("%s\n",revers); }

Su código corregido se muestra a continuación, ya que tiene algunos otros consejos en los comentarios:

 #include <stdio.h> /* you need also this file to use fgets, gets or printf */ #include <stdlib.h> #include <string.h> // ƒ to revers the word void lettreCount(char *saisi, int length){ char revers[length]; int i = length, j = 0; while (--i >= 0) { //loop revers[j++] = saisi[i]; } /* you need to end the string */ revers[j] = '\0'; printf("%s\n",revers); } int main(){ char text[100]; //Array for text int len; printf("Saisissez le text:\n"); /* Don't use the obsolete gets, use fgets */ fgets(text, sizeof text, stdin); len = strlen(text); lettreCount(text, len); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda