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

[SOLUCIONADO] Funcion para voltear cadena no funciona

Estas en el tema de Funcion para voltear cadena no funciona en el foro de C/C++ en Foros del Web. Quiero hacer una funcion para voltear una cadena, ya se que existe el strrev pero yo quiero hacer una funcion por mi mismo, He hecho ...
  #1 (permalink)  
Antiguo 29/11/2014, 17:48
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Funcion para voltear cadena no funciona

Quiero hacer una funcion para voltear una cadena, ya se que existe el strrev pero yo quiero hacer una funcion por mi mismo, He hecho este codigo pero me sale que el programa deja de funcionar y ademas el resultado sale con basura al final, ayuda :D.
#include<iostream>
#include<string.h>
using namespace std;
char* alreves(char* pal){
int i,n,a=0;
char* pal2;
n=strlen(pal);
for(i=n-1;i>=0;i--)
{
pal2[a]=pal[i];
a=a+1;
}
return pal2;
}
main()
{
char pal[70];
cout << "Escribe una cadena: ";
cin >> pal;
cout << alreves(pal);
}
  #2 (permalink)  
Antiguo 29/11/2014, 18:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Funcion para voltear cadena no funciona

Cuando declaras dentro de la función el puntero pal2, no reservas memoria para construir la cadena.
Has de hacer:
Código C++:
Ver original
  1. pal2=new char(n+1);
Has de reservar espacio para un caracter mas, porque cuado hayas terminado de rellenar la cadena pal2, has de añadir el caracter '\0' al final:
Código C++:
Ver original
  1. pal2[n]='\0';

Así ya funciona
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 29/11/2014, 18:13
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Funcion para voltear cadena no funciona

Cita:
Iniciado por dehm Ver Mensaje
Cuando declaras dentro de la función el puntero pal2, no reservas memoria para construir la cadena.
Has de hacer:
Código C++:
Ver original
  1. pal2=new char(n+1);
Has de reservar espacio para un caracter mas, porque cuado hayas terminado de rellenar la cadena pal2, has de añadir el caracter '\0' al final:
Código C++:
Ver original
  1. pal2[n]='\0';

Así ya funciona
Te entendi, pero en que lugar inserto los codigos que pusiste para que funione? Los puse pero me sale error en la linea del return "[Error] invalid conversion from `int' to `char*'"
  #4 (permalink)  
Antiguo 29/11/2014, 18:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Funcion para voltear cadena no funciona

La función puede quedar asi:
Código C++:
Ver original
  1. char* alreves(char* pal)
  2. {
  3.     int i,n,a=0;
  4.     char* pal2;
  5.     n=strlen(pal);
  6.     pal2=new char(n+1);  
  7.     for(i=n-1; i>=0; i--)
  8.     {
  9.         pal2[a]=pal[i];
  10.         a=a+1;
  11.     }
  12.     pal2[n]='\0';
  13.     return pal2;
  14. }

Saludos!
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 29/11/2014, 18:58
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Funcion para voltear cadena no funciona

Cita:
Iniciado por dehm Ver Mensaje
La función puede quedar asi:
Código C++:
Ver original
  1. char* alreves(char* pal)
  2. {
  3.     int i,n,a=0;
  4.     char* pal2;
  5.     n=strlen(pal);
  6.     pal2=new char(n+1);  
  7.     for(i=n-1; i>=0; i--)
  8.     {
  9.         pal2[a]=pal[i];
  10.         a=a+1;
  11.     }
  12.     pal2[n]='\0';
  13.     return pal2;
  14. }

Saludos!
Muchas gracias te lo agradezco mucho.
  #6 (permalink)  
Antiguo 30/11/2014, 05:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Funcion para voltear cadena no funciona

De nada.
Por cierto, no me había dado cuenta, pero has de tener en cuenta que el programa principal es una función int y que ha de retornar, como todas las funciones, un valor.
Así que la función main ha de definirse:
Código C++:
Ver original
  1. int main()
  2. {
  3. ........
  4. return 0;//devuelves 0 para indicar que todo ha ido bien
  5. }
__________________
Mi calculadora en Qt

Etiquetas: funcion
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 19:09.