Tratamiento de cadenas(string) en c++

astur
17 de Julio del 2004
Hola, tngo un pequeño problemita al intentar asignar un string a otro. Al intentar asignar un string a otro de la forma
string saludo= "hola"; Me produce un error debido a que alguna de las referencis no apunta a ningún objeto. ¿Alguien me podría decir una forma de asignar un string a otro?
Muchas gracias

chuidiang
17 de Julio del 2004
Si saludo es un puntero declarado asi

char *saludo;

no deberías tener problema

Si saludo está declarado como un array

char saludo [...];

entonces no puedes hacer un igual alegremente. Hay que usar la funcion strcpy()

strcpy (saludo, "Hola");

Eso si, saludo tiene que tener el hueco necesario para contener esa cadena mas un caracter mas. En este ejemplo, saludo debe tener como minimo un tamaño de 5 (las cuatro letras de hola mas un caracter de fin de cadena).

Se bueno.

astur
17 de Julio del 2004
Si, utilizando cadenas al estilo de c no tngo ningun problema. Lo que pasa es que tengo un arbol en el cual quiero insertar un string en cada nodo:
*********************
struct nodoA{
string palabra;

int cuenta;
nodoA *izq;
nodoA *dcha;
};

y con el siguiente codigo cada vez que ejecuto la sentencia de asignacion de strings me salta la excepcion de referencia nula.


raiz=(struct nodoA*)malloc(sizeof(struct nodoA));
assert(raiz!=0);
raiz->palabra=palabra;
raiz->dcha=0;
raiz->izq=0;
raiz->cuenta=0;

Llevo dandole vueltas y no encuentro el porque.. si alguien me pudiera echar una mano se lo agradeceria.

ramon
17 de Julio del 2004
es que llegamos a lo mismo....., en el struct debe declarar palabra como char.

después cuando está inicializando los datos del nodo que está creando, hace lo mismo.

strcpy(raiz->palabra, x);





Alejandro_
17 de Julio del 2004
Corregí un poco tu código para poder compilarlo (en general, creo que si las preguntas se acompañaran de un mínimo código compilable, la cosa sería bastante más fácil :)
Fíjate que estoy usando new en lugar de malloc, con lo que se llama al constructor de cada miembro de nodoA:

#include <iostream>

using namespace std;

struct nodoA{
string palabra;

int cuenta;
nodoA *izq;
nodoA *dcha;
};

int main()
{
nodoA *raiz= new nodoA;
cout << "sizeof(nodoA) = " << sizeof(nodoA) << 'n';
/* en mi máquina, sizeof(nodoA) es 16:
4 bytes para la string palabra (en realidad es un puntero);
4 bytes para int cuenta;
y los otros 8 para los dos punteros a nodoA */
raiz->palabra= "palabra";
raiz->dcha=0;
raiz->izq=0;
raiz->cuenta=0;

cout << "raiz->palabra = " << raiz->palabra << 'n';
delete raiz;

cout << "Enter para salir";
cin.get();
return 0;
}

// Alejandro