Tratamiento de cadenas(string) en c++
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
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
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.
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.
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.
*********************
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.
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);
después cuando está inicializando los datos del nodo que está creando, hace lo mismo.
strcpy(raiz->palabra, x);
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
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
