Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

120
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!