Ich arbeite ein Projekt für Klasse, die Erstellung eines binären Suchbaums von kriminellen Namen mit bis zu 8 Attribute pro Verbrecher erfordert.Array wird fälschlicherweise an eine Funktion in C++ übergeben
Ich habe ein String-Array att [] eingerichtet, das die Attribute für jeden Kriminellen einliest und dann an meine BSTInsert-Klassenfunktion übergeben wird. Durch das Debuggen kann ich sehen, dass das Array korrekt ist, wenn es nur in der setupTree-Funktion ist. Sobald es an BSTInsert übergeben wurde, hat es nicht mehr jede Zeichenfolge, sondern nur eine Zeichenfolge und darüber hinaus wird nichts vom Array in den Knoten in der Struktur kopiert.
Kann mir jemand sagen, was ich falsch mache?
Hier mein Code ist der Baum für die Einrichtung:
void setupTree(BST& criminals)
{
ifstream fin("criminals.txt");
string temp;
fin >> temp;
//FINISHED means it has all the criminals
while (temp != "FINISHED")
{
//SUSPECT lets it know to read in a new name and new attributes
if (temp == "SUSPECT")
{
string name;
string att[8];
int count = 0;
fin >> temp;
//if there is a false "suspect" line, quit
if (temp == "FINISHED") return;
name = temp;
fin >> temp;
while (temp != "SUSPECT" && temp != "FINISHED")
{
att[count] = temp;
count++;
fin >> temp;
}
criminals.BSTInsert(name, att, count);
}
}
}
Hier ist meine Klasse Funktion einen Knoten zum Einfügen:
bool BST::BSTInsert(treetype name, treetype att[], int count)
{
//gets the memory for the node. If unable, returns fail.
node* newNode = new node;
if (newNode == NULL)
{
return false;
}
newNode->count = 0;
//initializes the node with the given information to place
for (int i = 0; i < count; i++)
{
newNode->att[newNode->count] = att[count];
newNode->count++;
}
newNode->name = name;
newNode->left = newNode->right = NULL;
//if the tree is empty, creates this node as the root
if (root == NULL)
{
root = newNode;
root->parent = NULL;
}
else
{
//the tree is not empty, so it will use the parent to insert the node
node* current = root;
node* parent = NULL;
//finds the insertion spot
while (current != NULL)
{
parent = current;
if (name <= current->name)
{
current = current->left;
}
else
{
current = current->right;
}
}
//inserts the new node onto the correct side of the parent
if (name <= parent->name)
{
parent->left = newNode;
}
else
{
parent->right = newNode;
}
newNode->parent = parent;
}
return true;
'while (temp! =" VERDACHT "temp! =" FERTIG ")'? – drescherjm
Sind Sie sicher, dass nicht nur der Debugger nur ein Element anzeigt, weil er die Länge des Arrays nicht kennt? Was passiert, wenn Sie versuchen, att [1] im Debugger anzuzeigen –
Sie wissen also, wie Sie einen Debugger verwenden. Groß! Nun, was sagt Ihr Debugger innerhalb der for-Schleife in BSTInsert()? Weißt du, die Schleife, die versucht, die Attribute vom Parameter att zum att-Member im neuen Knoten zu kopieren? Warum versuchen Sie nicht, diese for-Schleife zu durchlaufen, und sehen Sie selbst, ob die Attribute korrekt kopiert werden. Oder nicht. –