Dar vuelta un string

Iniciado por VCore, 27 Julio 2011, 03:47 AM

0 Miembros y 1 Visitante están viendo este tema.

VCore

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.

Beakman

Para acceder a los caracteres del string, lo hacés de igual manera que con un vector de caracteres.
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..."

Triper0

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.

naderST

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).

VCore

Quedo clarisimo, gracias  :-*

Lambda

#5
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

Dark Invader

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:

#include <stdio.h>
#include <string.h>

int main(){
int j =0;
char cadena[]=("Hola");
j =strlen(cadena);
char *p =&cadena[j];
char *q =cadena;
while(*p!=*q){
*p--;
printf("%c",*p);
}
getchar();
return 0;
}


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

Salu2

naderST

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.

Dark Invader

Cita de: 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.

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

VCore

A ver tengo esto:

#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;
}




#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;
}


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.