为什么此代码无法运行

时间:2013-11-10 14:57:24

标签: c++

我想在

下生成一个兄弟姐妹树
                                   ABCD
                                 /  | \ \
                                A   B  C D

ABCD有四个节点,我为此* next []采用了一个数组。但是这段代码没有成功运行,但会生成序列。我在main()中编写了代码,为enque函数提供了字符。例如str.at(x)其中x在for循环中是可变的。

     struct node
    {
        string info;
        struct node *next[];
    }*root,*child;

    string str, goal;
    int dept=0,bnod=0,cl,z=0;
    void enqueue(string n);

    void enqueue(string n)
    {

        node *p, *temp;
        p=new node[sizeof(str.length())];
        p->info=n;
        for (int x=0;x<str.length();x++)
        p->next[x]=NULL;
        if(root==NULL)
        {
            root=p;
            child=p;
        }
        else
        {   
            cout<<" cl="<<cl<<endl;
            if(cl<str.length())
            {
                child->next[cl]=p;
            temp=child->next[cl];

            cout<<"chile-info "<<temp->info<<endl;
            }   
            else
                cout<<" clif="<<cl<<endl;
}
}

输出

Enter String: sham
cl=0
chile-info s
cl=1
chile-info h
cl=2
chile-info a
cl=3
chile-info m

RUN FAILED (exit value 1, total time: 2s)

2 个答案:

答案 0 :(得分:2)

首先,“RUN FAILED”来自哪里?这是特定于您的编译器吗?

其次,关于行p=new node[sizeof(str.length())];,它可能不会给你你想要的东西,因为你正在取无条件整数的sizeof(这取决于你的平台可能会给出你不管字符串长度是多少。这不是你想要的 - 你想要字符串的实际长度。)

所以 - 既然您已经在使用std::string,为什么不使用std::vector?你的代码看起来会更友好: - )

如果我把前几行作为你想要的输出(抱歉,你发布的代码很难破译,我认为它也不会编译,所以我忽略它;-))

这样的事情对你有用吗?

#include <iostream>
#include <vector>
#include <string>

typedef struct node
{
  std::string info;
  std::vector<struct node*> children;
}Node;

Node * enqueue(std::string str)
{
  Node * root;
  root = new Node();

  root->info = str;

  for (int x = 0; x < str.length(); x++)
  {
    Node * temp = new Node();
    temp->info = str[x];
    root->children.push_back(temp);
  }

  return root;
}

int main()
{
  Node * myRoot = enqueue("ABCD");

  std::cout << myRoot->info << "\n";

  for( int i = 0; i < myRoot->children.size(); i++)
  {
    std::cout << myRoot->children[i]->info << ", ";
  }

  char c;
  std::cin >> c;
  return 0;
}

答案 1 :(得分:1)

您的代码似乎未满。 至少行

p=new node[sizeof(str.length())];

似乎错了。 我想enqueue应该类似于以下内容:

 struct node
    {
        string info;
        struct node *next; // [] - is not necessary here
    }*root,*child;

    string str, goal;
    int dept=0,bnod=0,cl,z=0;
void enqueue(string n)
{

node *p, *temp;
p = new node;
p->next = new node[str.length()];
p->info=n;
for (int x=0;x<str.length();x++)
{
    p->next[x] = new node;
    p->next[x]->next = 0;
    p->next[x]->info = str[x];
}

if(root==NULL)
{
    root=p;
    child=p;
}
}

请提供更多信息以提供更正确的答案