Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: VCore en 27 Julio 2011, 03:47 am



Título: Dar vuelta un string
Publicado por: VCore en 27 Julio 2011, 03:47 am
Buenas, quiero hacer una función para dar vuelta un string (ya se que existe strrev pero quiero hacer la mia).

La cosa es que no se me ocurre como "desglosar" cada caracter del string ¿como puedo hacer esto?, y por otro lado me gustaría saber como convertir un string a una lista.

Saludos.


Título: Re: Dar vuelta un string
Publicado por: Beakman en 27 Julio 2011, 03:55 am
Para acceder a los caracteres del string, lo hacés de igual manera que con un vector de caracteres.
Código
  1. variable_string[ a ];
Después bueno, supongo que ya sabrás, haces una triangulación, o copiás los caracteres a un nuevo string, etc..

No se qué querés decir con "convertir un string a una lista..."


Título: Re: Dar vuelta un string
Publicado por: Triper0 en 27 Julio 2011, 04:02 am
Supongo que con lo de la lista te referís a poner cada carácter en cada nodo de la lista, en ese caso, como te dijo qily, agarras a la variable_string, la tomas como un vector, y vas recorriendo los índices y cargándolos en los nodos.
Cuando declaras la lista, la declaras con un dato de tipo char y el último, si necesitas, le pones el '\0' para que quede como una lista de string.


Título: Re: Dar vuelta un string
Publicado por: naderST en 27 Julio 2011, 04:39 am
Una string no es mas que un arreglo de caracteres, entonces supongamos que tenemos la variable cadena que es un string y esta contiene Hola tenemos que el arreglo sería así:

cadena[0] = 'H';
cadena[1] = 'o';
cadena[2] = 'l';
cadena[3] = 'a';
cadena[4] = '\0';

Por lo tanto no es mas que hacer un for desde 0 a 3 (strlen(cadena)-1).


Título: Re: Dar vuelta un string
Publicado por: VCore en 27 Julio 2011, 07:38 am
Quedo clarisimo, gracias  :-*


Título: Re: Dar vuelta un string
Publicado por: Lambda en 27 Julio 2011, 13:50 pm
Un for de 0 a 3 seria 0, 1, 2, seria de 0 a 4 (0, 1, 2, 3), no hace falta el -1 en el strlen, notese que si pones como condicion <= en el for de 0 a 3 seria lo mismo que si pusieses < y de 0 a 4, es mas "rapido" por que te ahorras una doble comparacion y la resta al strlen


Título: Re: Dar vuelta un string
Publicado por: Dark Invader en 27 Julio 2011, 13:51 pm
Creo que en vez de arreglos puedes usar punteros,en este caso se alarga,pero para hacer funciones de ese tipo es lo mejor que hay:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. int j =0;
  6. char cadena[]=("Hola");
  7. j =strlen(cadena);
  8. char *p =&cadena[j];
  9. char *q =cadena;
  10. while(*p!=*q){
  11. *p--;
  12. printf("%c",*p);
  13. }
  14. return 0;
  15. }

Solo era un pequeño detalle.Para hacer funciones de la libreria string.h,lo mejor son los punteros.

Salu2


Título: Re: Dar vuelta un string
Publicado por: naderST en 27 Julio 2011, 18:37 pm
Pero a la final es un puntero a una cadena osea a un arreglo de caracteres. No es cuestión de querer o no usar un arreglo, las cadenas son arreglos quieras o no.


Título: Re: Dar vuelta un string
Publicado por: Dark Invader en 27 Julio 2011, 18:48 pm
Pero a la final es un puntero a una cadena osea a un arreglo de caracteres. No es cuestión de querer o no usar un arreglo, las cadenas son arreglos quieras o no.

Cierto,pero me parece mas facil manejarlo asi...Por lo menos desde mi punto de vista claro esta,cualquiera tiene su metodo...Creo que apuntando a las cadenas y aumentando el valor del puntero es mas facil,pero bueno para gustos los colores...

Salu2


Título: Re: Dar vuelta un string
Publicado por: VCore en 4 Agosto 2011, 02:50 am
A ver tengo esto:

Código:
#include <cstdlib>
#include <iostream>
#include <../Proyectos/Test/misFunciones.h>
using namespace std;

int main()
{
string entrada;
cout << "Pone un string que te lo doy vuelta:";
cin >> entrada;
cout << darVuelta(entrada);
cout << endl;
return 0;
}



Código:
#include <string>
using namespace std;

string darVuelta(string unString)
{
       string outputString;
       
       for(int i = unString.size(); i > -1; i = i - 1)
               outputString[unString[i]];
       return outputString;
}

Código:
using namespace std;

string darVuelta(string unString);

Me compila sin problemas, pero luego de poner un texto cualquiera y darle enter se me cierra la pantalla y no llego a verlo.


Título: Re: Dar vuelta un string
Publicado por: Beakman en 4 Agosto 2011, 03:17 am
Antes del return 0 en el main, pone un cin.get();
Para que no se cierre la ventana.


Título: Re: Dar vuelta un string
Publicado por: VCore en 4 Agosto 2011, 04:43 am
Nop, sigue cerrandose :(