Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Función que recoja una cadena y regrese una cadena

Estas en el tema de Función que recoja una cadena y regrese una cadena en el foro de C/C++ en Foros del Web. Saludos, el problema que tengo es que en una función que tengo, simplemente no puedo regresar una cadena de caracteres. Coloco el código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 09/02/2012, 02:47
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Exclamación Función que recoja una cadena y regrese una cadena

Saludos, el problema que tengo es que en una función que tengo, simplemente no puedo regresar una cadena de caracteres. Coloco el código:


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char manto[200];
  5. char gorro[200];
  6. char limpiar (char cadena[200]);
  7.  
  8. int main()
  9. {
  10. fgets(manto,200, stdin);
  11. gorro[200] = limpiar(manto);
  12. printf("\nEs: %s, listo", gorro);
  13.  
  14. return 0;
  15. }
  16.  
  17.  
  18. char limpiar (char cadena[200])
  19. {
  20.   char tempo[200];
  21.   char variable[200];
  22.  
  23.   int letras = strlen(cadena), i;
  24.  
  25. for(i=0;i<letras-1; i++)
  26. {
  27. if (cadena[i] != '\n')                    
  28. tempo[i] = cadena[i];
  29. printf("\nResulta: %c\n", tempo[i]);
  30. }
  31. sprintf(variable, "%s", tempo);
  32.  
  33. return variable[200];
  34. }

Lo único que escribe es "Es: , listo"

He intentado con algo así tambien:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char manto[200];
  5. char *gorro[200];
  6. char *limpiar (char cadena[200]);
  7.  
  8. int main()
  9. {
  10. fgets(manto,200, stdin);
  11. gorro[200] = limpiar(manto);
  12. printf("\nEs: %s, listo", gorro);
  13.  
  14. return 0;
  15. }
  16.  
  17.  
  18. char *limpiar (char cadena[200])
  19. {
  20.   char tempo[200];
  21.   char *variable[200];
  22.  
  23.   int letras = strlen(cadena), i;
  24.  
  25. for(i=0;i<letras-1; i++)
  26. {
  27. if (cadena[i] != '\n')                    
  28. tempo[i] = cadena[i];
  29. printf("\nResulta: %c\n", tempo[i]);
  30. }
  31. *variable = tempo;
  32.  
  33. return variable[200];
  34. }

Pero es el mismo resultado que la anterior, regresa "Es: , listo".

¿Alguna ayuda para que una función a la que se le asigna como argumento una cadena regrese otra cadena?

Saludos y gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #2 (permalink)  
Antiguo 09/02/2012, 12:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Función que recoja una cadena y regrese una cadena

Hola Dtc! tenes varios problemas con el manejo de cadenas pero con practica todo se corrige. Para que una funcion regrese una cadena es como haces en el segundo caso
Código C:
Ver original
  1. char *limpiar (char cadena[200])
Y para devolver una cadena en el return tenes que hacer return variable(que es la direccion de inicio del arreglo) y noo! return variable[200], de esta manera solo estas devolviendo lo que se encuentra en la posicion 200 del arreglo

Pero! si vos creas un arreglo en una funcion y queres devolver dicho arreglo vas a tener un error ya que ese arreglo es local a la funcion y cuando la funcion termine ese arreglo ya no va existir mas. En este caso para retornar una cadena tiene que ser el mismo arreglo pasado a la funcion, osea return cadena;

Otra cosa, si vos declaras
Código C:
Ver original
  1. char *arreglo[200];
lo que estas haciendo es declarar un arreglo de punteros a char, donde cada posicion del arreglo es un puntero a una cadena.
Otro error es hacer
Código C:
Ver original
  1. gorro[200] = limpiar(manto);
Supongo que queres hacer: es asignar en el arreglo gorro el arreglo devuelto de la funcion limpiar, lo que esta mal. Para copiar un arreglo a otro tenes que usar la funcion strcpy de la libreria string.h

Pasando en limpio seria:
Código C:
Ver original
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <string.h>
  4.      
  5.     char manto[200];
  6.     char gorro[200];
  7.     char *limpiar (char cadena[200]);
  8.      
  9.     int main()
  10.     {
  11.     fgets(manto,200, stdin);
  12.     strcpy(gorro, limpiar(manto)); // llama a la funcion limpiar y el retorno se lo copia a gorro
  13.     printf("\nEs: %s, listo", gorro);
  14.     getch();
  15.      
  16.     return 0;
  17.     }
  18.      
  19.      
  20.     char *limpiar (char cadena[200])
  21.     {
  22.      
  23.      ACA PROCESA EL ARREGLO CADENA[200]
  24.  
  25.     return cadena; // retorna cadena
  26.     }

Espero te sirva, saludos
  #3 (permalink)  
Antiguo 09/02/2012, 17:15
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Función que recoja una cadena y regrese una cadena

Muchas gracias, no había contemplado eso, lo de punteros y estructuras es lo que más desastres me causa jeje
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk

Etiquetas: variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:31.