-1

我正在尝试实现任何长度的字符串树。此代码适用于字符串 1、2、3、4 的长度,但不适用于 5 以上。
我有一个主文件,但它在下面显示错误。问题是我想说的是为什么这段代码适用于长度为 4 的字符串,但是当我输入长度为 5 或以上的字符串时,它真的会抛出一个错误,就像在 OUTPUT下一样

  1. 插入
  2. 出口

输入您的选择:1

输入字符串:在抛出 'std::out_of_range' 实例后调用 asdfg 终止 what(): basic_string::at

RUN FAILED(退出值1,总时间:1s)


struct node
{
    string info;
    struct node *next[];
 }*front,*rear;
    void enqueue(string s)
        {
            node *p,*temp;
            p=new node[sizeof(node)];
            p->next[n.length()];
            p->info=s; 
            cout<<" pe "<<p->info;
            for (int i=0;i<n.length();i++)
            {
                p->next[i] = new node;
                p->next[i]=NULL;
            }
            if(front==NULL)
            {
                front=p;
                rear=p;
            }
            else
            {
                cout<<"cl"<<cl<<endl; 
                if(cl<n.length())
                    {
                    rear->next[cl]=p;
                    temp=rear->next[cl];
                    cout<<"chile-info "<<temp->info<<endl;
                    }   
            }      
        }
    void display()
{
    int k=0;
    node *t, *temp;
    t=front;

    if(front==NULL||rear==NULL)
    {
        cout<<"\nQueue Empty!!!";
    }
    else
    {
        temp=t;
       while(t!= NULL)
       {

           if(t->next[k] !=NULL)
           {
           temp=t->next[k]; 

           cout<<temp->info<<" ";
           }

           k++;
         if(k==n.length())
         {           
          k=0;
          t= t->next[k];
          temp=t;

         }

       }       
    }

}

int main(int argc, char** argv) {
int ch,len,x;
string string1;
    rear=NULL;
    front=NULL;
        cout<<"\n1. Insert\n2. Exit\n";
        cout<<"\nEnter Your Choice: ";
        cin>>ch;

        switch(ch)
        {
            case 1:
                    cout<<"\nEnter The String: ";
                    cin>>n;
                    len=n.length();
                    enqueue(n);
                    cout<<" len "<<len;
                    for(int p=1;p<=len;p++)
                    bnod+=pow(len,p);

                    cl=0;
                    for (x=0;x<len;x++)
                      {
                         string1=n.at(x);
                         enqueue(string1);
                         cl++;
                      }
                     display();


         cout<<"\n########################\n";
                    break;
            case 2:
                    exit(0);
                    break;
            default:
                    cout<<"\nWrong Choice!!! Try Again.";
        }
    return 0;
}
4

1 回答 1

3

当你写这个

        p=new node[sizeof(node)];
        p->next[n.length()];

你真正想要的是这个

        p = new node;
        p->next = new node*[n.length()];

这没有意义

            p->next[i] = new node;
            p->next[i]=NULL;

您分配一个节点对象,然后将其分配给p->next[i],然后将下一行分配p->next[i]给 NULL。很难说你在这里的意图,也许是这个?

            p->next[i] = new node;
            p->next[i]->next = NULL;

用指针编写动态分配代码很困难。您需要仔细考虑您编写的代码的真正作用。

于 2013-11-11T12:42:38.057 回答