| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Anastacius
Registrado: 26 Oct 2013 Mensajes: 41
| Publicado: 24/06/2014 6:52 pm | | | Título: Colocar una cadena al reves. |
| Hola Hacia mucho que no andaba por aca, pero la programacion siempre nos llama desde las sombras para acercarnos al teclado.
Tengo un ejercicio, en el cual, tengo que dar vuelta una cadena al reves (Libro Kernighan and Ritchie, segunda edicion). He probado dos soluciones diferentes con diferentes niveles de exito.
| Código: | #include <stdio.h> #include <string.h> #define MAXLINE 1000
int main() { printf("Programa que coloca al reves una cadena\n"); int c, n; char linea[MAXLINE]; n = 0; while((c = getchar()) != '\n') { if(c != '\n') { linea[n] = c; n = n + 1; printf("%c\n",c); } } printf("El array es: %s\n", linea); while(n >= 0) { printf("%c",linea[n]); n = n - 1; }
getchar(); return 0; }
|
Este funciona bien hasta cierto punto. Si yo coloco la cadena "Hola", me la da vuelta, pero agrega un "1" adelante. Ejemplo
Hola: 1aloH. Ademas, cuando imprime la cadena de forma normal (con el printf) me coloca[ Hola¨" ] . (sin los corchetes)
Es decir, creo que la logica esta bien, pero ahi hay algo que no termino de comprender...
El otro codigo tiene un problema similar.
| Código: | #include <stdio.h> #define MAXLINE 1000
int main() { printf("Coloca la cadena al reves\n"); int c, n, m, end; n = 0; m = 0; char line[MAXLINE]; char enil[MAXLINE]; while((c = getchar()) != EOF) { line[n] = c; n = n + 1; end = n; if(c == '\n') { while(end >= 0) { printf("End es igual a = %d\n",end); enil[m] = line[n]; m = m + 1; n = n - 1; end = end - 1; printf("%c\n",enil[m]); } printf("%s\n",enil); } } return 0; }
|
En este otro, agrega como cinco caracteres extraños mas, todos provenientes de las cuevas ASCII (lugares del ascii que nadie usa, jeje)
Si me pudiesen decir que estoy haciendo mal, les agradeceria muchisimo. Nos vemos  _________________ Programacion en C - HTML - Batch - Aprendiendo : Java... |
| | Volver arriba | |  | dehm
Registrado: 29 Abr 2011 Mensajes: 143
| Publicado: 25/06/2014 2:35 am | | | Título: |
| En el primer caso, parece que una vez que has capturado la entrada de datos y la has pasado al array, has de introducir el caracter '\0' de forma manual. Es decir:
| Código: | ......................... printf("%c\n",c); } } linea[n]='\0'; //aqui has de introducir el caracter de fin de cadena printf("El array es: %s\n", linea); ..................................... |
Saludos! _________________ Aprendiendo |
| | Volver arriba | |  | dehm
Registrado: 29 Abr 2011 Mensajes: 143
| Publicado: 25/06/2014 2:45 am | | | Título: |
| Bueno, matizo la respuesta. El poner el caracter '\0' al final sería sólo para indicarle a printf dónde acaba la cadena que ha de mostrar. Por eso lo del Hola¨" y similares. Para que te empieze a mostrar desde el último caracter perteneciente a la cadena, has de retroceder al último caracter realmente introducido, ya que en tu bucle, incrementas el valor de n después de introducir un caracter. Entoces puedes hacer:
| Código: | n--; //ponemos n en el ultimo caracter antes de pulsar enter while(n >= 0) { printf("%c",linea[n]); n = n - 1; }
|
_________________ Aprendiendo |
| | Volver arriba | |  | | dehm
Registrado: 29 Abr 2011 Mensajes: 143
| Publicado: 25/06/2014 2:55 am | | | Título: |
| Y creo que si, en el segundo caso, al estar n una posición después de la frase, cuando m vale 0, ha de tener el valor de n-1, y no de n
| Código: | enil[m] = line[n-1]; |
O decrementar n antes de entrar en el bucle. Por cierto, tal como lo has planteado no va a hacer la asignación, ¿no?...bueno, yo es que he hecho algún cambio:
| Código: | #include <stdio.h> #define MAXLINE 1000
int main() { printf("Coloca la cadena al reves\n"); int c, n, m, final; n = 0; m = 0; char line[MAXLINE]; char enil[MAXLINE]; while((c = getchar()) != '\n') { line[n] = c; n = n + 1; final = n; } while(final >= 0) { printf("final es igual a = %d\n",final); enil[m] = line[n-1]; m = m + 1; n = n - 1; final = final - 1; printf("%c\n",enil[m]); }
printf("%s\n",enil);
return 0; }
|
Saludos![/i] _________________ Aprendiendo |
| | Volver arriba | |  | Anastacius
Registrado: 26 Oct 2013 Mensajes: 41
| Publicado: 25/06/2014 4:37 am | | | Título: |
| Les agradezco mucho, ambos codigos funcionan perfectamente ahora Es genial que exista un lugar en el mundo donde todos te ayuden 
Saludos a todos _________________ Programacion en C - HTML - Batch - Aprendiendo : Java... |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |