C/Visual C - Error con esta funcion (vectores)

 
Vista:
Imágen de perfil de hector espoz

Error con esta funcion (vectores)

Publicado por hector espoz (1 intervención) el 10/03/2007 01:21:31
hola a todos , estoy haciendo un analizador de sintaxis para un lenguage de seudocodigo. entonces estoy implementando una funcion similar a la StringTokenizer de java , esta trabaja asi:

lee una linea de seudocodigo y separa y almacena las palabras delimitadas por los siguentes caracteres " +-=<>,*/\n"
Ej , se le pasa a la funcion esta cadena "si a=0 entonces\n" , lo que la funcion deveria devolver es un vector asi con las posiciones entre parentesis igual a:

(0)=si
(1)=" "
(2)= a
(3)= =
(4)= 0
(5)= ""
(6)="entonces"

en lugar de eso me devuelve un una cadena basura de caracteres iguales todos. adjunto el codigo

#include <iostream.h>
#include <vector.h>
#include <string.h>
using namespace std;


struct Cadena;
struct Cadena
{
char *cad;
};

vector<Cadena> tokenizer(char *l);
int Longitud(char *l);
int Longitud(char *l)
{
int i=0;
do{
l++;
i++;
}while(*l);
return i;
}

vector<Cadena> tokenizer(char *l)
{
char *ptr;
int c=0;
Cadena c2;
Cadena c1;
vector <Cadena>linea;
vector <char>palabra;
linea=vector<Cadena>();
palabra=vector<char>();
for(int i=0;i<Longitud(l);i++){
if(l[i]=='='||l[i]=='+'||l[i]=='-'||l[i]==')'||l[i]=='('||l[i]==','||l[i]=='<'||l[i]=='>'||l[i]==' '||l[i]=='\n'){
for(int j=c;j<i;j++){
palabra.push_back(l[j]);
}
palabra.push_back('\0');
char *ptr=new char[palabra.size()];
char *ptr2=new char[2];
ptr2[0]=l[i];
ptr2[1]='\0';
for(int k=0;k<palabra.size();k++)
{
ptr[k]=palabra.at(k);
}
c1.cad=ptr;
c2.cad=ptr2;
cout<<"c1 = "<<c1.cad<<endl;
cout<<"c2 = "<<c2.cad<<endl;
linea.push_back(c1);
linea.push_back(c2);
cout<<"linea = "<<linea.at(linea.size()-2).cad<<endl;
cout<<"linea = "<<linea.at(linea.size()-1).cad<<endl;
c=i+1;
palabra.clear();
delete ptr;
delete ptr2;
}
}
return linea;
}


main()
{
char **p;
cout<<"hola"<<endl;
vector<Cadena>linea;
linea=tokenizer("si a=0 entonces\n");
cout<<"tam linea"<<linea.size()<<endl;
for(int k=0;k<linea.size();k++){
p=&linea.at(k).cad;
cout<<*p<<endl;
}
return 0;
}

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error con esta funcion (vectores)

Publicado por Nelek (816 intervenciones) el 12/03/2007 07:46:10
Hola,

no me he metido con tu codigo porque ahora no dispongo del tiempo necesario, pero a mi me ha pasado tambien lo que dices de las cadenas de caracteres.

A mi me pasaba por incompatibilidades entre CString y LPTCSTR.

Comprueba que estes apuntando a las direcciones que toca, que no se te hayan mezclado los tipos y que los punteros y las referencias esten correspondidas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar