程序其他部分没给出,先请帮忙看看这个函数!
void Coding(Htree* Ht,string &c,char e,int len)
{
string s;
char r;
Htree* v=Ht;
int i=0;
for(;i<len;i++)
{
if(v[i].key==e)
break;
}
while(v[i].parent!=0)
{
if(i==v[v[i].parent].lchild)
s+="0";
else
s+="1";
i=v[i].parent;
}
int k=s.size();
for(;k>=0;k--)
{
r=s[k];
s[k]=s[s.size()-k];
s[s.size()-k]=r;
}
c+=s;//加上这句后程序就出错,去掉后就没问题了!
}
void Coding(Htree* Ht,string &c,char e,int len)
{
string s;
char r;
Htree* v=Ht;
int i=0;
for(;i<len;i++)
{
if(v[i].key==e)
break;
}
while(v[i].parent!=0)
{
if(i==v[v[i].parent].lchild)
s+="0";
else
s+="1";
i=v[i].parent;
}
int k=s.size();
for(;k>=0;k--)
{
r=s[k];
s[k]=s[s.size()-k];
s[s.size()-k]=r;
}
c+=s;//加上这句后程序就出错,去掉后就没问题了!
}
{
string s;
char r;
Htree* v=Ht;
int i=0;
for(;i <len;i++) //这个不防改成:for(;i<len && v[i].key!=e;i++);
{ //
if(v[i].key==e) //
break;
}
while(v[i].parent!=0)
{
if(i==v[v[i].parent].lchild)
s+="0";
else
s+="1";
i=v[i].parent;
}
int k=s.size();
for(;k>=0;k--) //请问一下这个循环是什么作用?
{
r=s[k]; //当k=s.size()时,首尾两个元素进行一次交换 s[k]=s[s.size()-k]; //当k=0时,首尾两个元素又进行一次交换 s[s.size()-k]=r; //这个for下来,s中什么都没有变。 }
//不防改成:for(;k>s.size()/2;k--){...}
c+=s;//加上这句后程序就出错,去掉后就没问题了!
}
for(;i <len;i++)
{
if(v[i].key==e)
break;
} //如果找不到,i的值是len ?那么v[len]是否溢出?
while(v[i].parent!=0) 2.
int k=s.size(); //如果CString是从0开始,那么s.size()为长度,最后一个char ,是否应为s[s.size()-1]
for(;k>=0;k--)
{
r=s[k];
s[k]=s[s.size()-k];
s[s.size()-k]=r;
}
粗略看出来的错误?
c+=s;//加上这句后程序就出错,去掉后就没问题了!
c+=s;//中的操作仅仅只是将s链接到c后面去,然而你的S却只是在本函数中的局部变量,当你加上这句后,函数执行完毕,C中就少了字符串的结束字符'\0',那样当然会出错了呀。建议用NEW后再进行+=操作。
三十几个字符的话,可以用CString这个类,或者你自己定义一个char*型的串,足够长就行了。呵呵。