所以我创建了一个数据包数据结构,每次插入一个字符串的同一个实例时我都试图递增一个计数器,但由于某些原因,即使我输入了10个相同的字符串,我的计数器也不会增加。建议?
struct BagNode
{
string dataValue;
int dataCount;
BagNode * next;
};
class Bag{
private:
BagNode * head;
public:
Bag()
{
head = NULL;
//curr = NULL;
}
void insert(string v)
{
if(head == NULL){ //empty list
head = new BagNode;
head->dataValue = v;
head->next = NULL;
}
else
{
BagNode * n = new BagNode; // new node
n->dataValue = v;
n->dataCount = 0;
BagNode * current = head; //for traversal
//current = head;
if(isSame(current->dataValue,v))
{
n->dataCount+= 1;
}
else
{
if(!isBefore(current->dataValue, v)) //new head
{
n->next = head;
head = n;
}
else{ //mid and tail insert
while(current->next && isBefore(current->next->dataValue,v))
{
current = current->next;
}
n->next = current->next;
current->next = n;
}
}
}
}
bool isSame(string a, string b)
{
transform(a.begin(), a.end(), a.begin(), ::tolower);
transform(b.begin(), b.end(), b.begin(), ::tolower);
if(a == b) {
return true;
}
else {
return false;
}
}
void traverse()
{
BagNode * current;
current = head;
while(current)
{
output << current->dataValue << " (" << current->dataCount << ")" << " ";
current = current->next;
}
cout << endl;
}
答案 0 :(得分:0)
您正在检查是否应该增加列表的第一个元素,否则您只需要遍历它以找出插入新节点的位置。请记住,您实际上从未检查过任何其他节点是否包含您应该查找的值。你只需要修复它。
正如Sam上面提到的,你仍然有内存泄漏。我还要补充一点,总是存储字符串的小写版本而不是每次都重新计算可能会更好。