Progtwig palíndromo

He creado un progtwig que toma una cadena ingresada y emite la cadena hacia atrás. He creado una función que cuenta el número de caracteres en una cadena. Con esa información, he creado otra función que pone el primer carácter de la matriz original al final de la nueva matriz. Por lo tanto, cuando el bucle en la función ha finalizado, la nueva matriz contiene las letras de la matriz original pero al revés. Sin embargo, me estoy topando con alguna dificultad. Sigo desconfiando de los arreglos de caracteres y no estoy seguro de si los estoy usando correctamente. podria alguien ayudarme?

#include  #define MAXLINE 1000 char backward(char str[], int count) int count(char str[]) int main() { char orig[MAXLINE]; int c; scanf("%s", orig); c = count(orig); printf("%s", backward(orig, c)); return 0; } char backward(char str[], int count) { char back[MAXLINE]; int i; for(i = 0; i <= count; ++i) { back[count] = str[i]; --count; return back; } int count(char str[]) { int i; for (i = 0; str[i] != '\0'; ++i) ; return i; } 

Edición: Entrada: Digamos “minivan”. La salida esperada sería “navinim”. No hay salida real todavía. Estoy recibiendo este error:

 palindrome.c:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' 

El error que está recibiendo es porque sus prototipos están equivocados:

 #include  #define MAXLINE 1000 char backward(char str[], int count) /* missing ; */ int count(char str[]) /* missing ; */ int main() { 

También debe considerar reemplazar count() con strlen(3) del archivo de encabezado . La biblioteca estándar está llena de utilidades que se han depurado y se sabe que funcionan bien; vale la pena usarlas. (Sí, hay valor educativo en la reimplementación de ellos. Pero en ese caso, prepárese para probar con una variedad de casos de esquina).

Es probable que su código no se compile porque se saltó una llave de cierre backward() .

 char backward(char str[], int count) { char back[MAXLINE]; int i; for(i = 0; i <= count; ++i) { back[count] = str[i]; --count; /** You should add a } character here! **/ return back; } 

EDICIÓN PRINCIPAL 1:

Traté de comstackr su código y había muchas cosas mal con él. Aquí está el código de trabajo:

 #include  #include  #include  #define MAXLINE 1000 char * backward(char * str); int main() { char orig[MAXLINE]; int c; scanf("%s", orig); printf("%s\n", backward(orig)); return 0; } char * backward(char * str) { int count = strlen(str); char * back = malloc(MAXLINE); int i; for(i = 0; i < count; i++) { back[count-i-1] = str[i]; } back[count] = 0; // Add the null termination character. return back; } 

Cuando ejecuto este código y escribo "abcde", sale "edcba". Déjame saber si tienes alguna pregunta específica sobre cómo funciona esto. Me deshice de su función count() porque es un duplicado de strlen() , y moví la llamada a strlen() dentro de backward() para hacer que la interfaz con la función backward() más simple.

Otra cosa que hizo que su código fallara es que estaba disminuyendo el count dentro del bucle for, lo que causaría que su bucle for terminara antes de lo que quería.

Esta línea tiene un error por un error:

 back[count] = str[i]; 

count no es el último carácter de la cadena, es el carácter '\0' .

También está devolviendo una variable de stack – esto no va a funcionar.

Debes invertir la cadena en su lugar:

 for(i = 0; i <= count; ++i) { --count; char tmp = str[i]; str[i] = str[count]; str[count] = tmp; } 

A continuación, puede devolver str .

Tu progtwig tiene muchos errores. En primer lugar, ha omitido los puntos y comas (;) al declarar los prototipos hacia atrás y contar. Entonces no ha cerrado el bucle for en función hacia atrás con llaves (}). Pero los tres problemas más grandes son 1. Ha definido la función hacia atrás como un tipo de datos char, pero está devolviendo un puntero a la matriz del tipo de datos char 2. Está accediendo a back [count] en lugar de back [count-1]. Supongamos que la cadena es minivan. El conteo contendrá 7. el último carácter está en la sexta posición, no en la séptima, porque en la matriz los subíndices comienzan con 0, no 1. Y atrás [conteo] apuntará a un carácter nulo, es decir, ‘\ 0’ 3. Está incrementando i y disminuyendo el conteo marcando i <= contar. Esto procesará su cadena sólo hasta la mitad de ella.

Aunque el progtwig correcto ha sido publicado por David Greyson, pero desde que eliminó la función de conteo e introdujo la función strlen y malloc, estoy publicando su progtwig de nuevo simplemente corrigiendo su algoritmo

 #include  #define MAXLINE 1000 char *backward(char str[], int count); int count(char str[]); int main() { char orig[MAXLINE]; int c; scanf("%s", orig); c = count(orig); printf("%s", backward(orig, c)); return 0; } char *backward(char str[], int count) { char back[MAXLINE]; int i; for(i = 0; i < count; ++i) { back[count-i-1] = str[i]; } back[i] = '\0'; return back; } int count(char str[]) { int i; for (i = 0; str[i] != '\0'; ++i) ; return i; } 

Puede crear un puntero de carácter y luego agregar la longitud de la cadena a este puntero. Probablemente debería ser char *reverse = (char *)name , luego agregar reverse = reverse + strlen(name) -1 .

Luego puedes usar while loop a través del inicio de la cadena. Todo el código se ve,

 void main(void) { char *name = "Kernel"; char *reverse = (char *)name; reverse = reverse + strlen(name) - 1; while(*reverse) printf("%c", *reverse); } 
 #include #include int main() { size_t i,j; char arr[10]={'\0'};//orignal array char arr2[10]={'\0'};//it's reverse to be gets(arr);//prompt strncpy(arr2,arr,10);//copy strrev(arr2); if(strncmp(arr,arr2)==0) printf("plaindrom"); return 0; }