gpt4 book ai didi

c++ - cin 到链表核心转储

转载 作者:行者123 更新时间:2023-11-28 07:05:49 25 4
gpt4 key购买 nike

我在使用 C++ 中的 cin 时遇到问题。我正在尝试 cin 一个文本文件到程序中,然后将所有单词等放在一个链表中,但是我遇到了 temp->next 部分,核心被转储。

string x = ""; //ordet blir lagret her
string y = stopwords_c;
string tegnfjern = stopchars_c;

int antallOrd = 0;

struct ord{
string ordet;
int ant;
};

struct node{
node* next;
ord o;
};

int main(){

node* ord = new node;
node* temp = ord;


while(cin >> x)
{
if(temp == NULL)
{
temp->o.ant++;
temp->o.ordet =x;
antallOrd++;
}

else
{
while(temp->next != NULL && temp->o.ordet != x)
{
temp = temp->next;
}

if(temp->o.ordet == x)
{
temp->o.ant++;
}

else
{
if (cin >> x)
{
temp->next = new node;
temp = temp->next;
}

temp->o.ordet = x;
temp->o.ant++;
}

temp = ord;
}
}

最佳答案

你首先检查是否if(temp == NULL)如果是这样,您仍然想访问它的成员。那行不通。如果tempNULL您必须创建新的节点结构并将其添加到列表中(取决于 temp 的确切含义)。因此,关于节点结构和列表的更多信息会很棒。

编辑让我总结一下你应该做什么:

  • 将默认构造函数添加到初始化 ant 的两个结构中至 0nextNULL (或 nullptr,如果您可以使用新标准)。
  • 正如已经多次提到的:摆脱试图访问 nullptr 成员的代码。
  • 只需放下 if (cin >> x) .您不需要它,因为您忽略了读入 x 的旧值在循环条件中(此外,如果 cin >> x 失败,您将覆盖现有条目)。但只有条件本身——而不是其中执行的代码:您肯定需要该代码,因为它会创建新节点来存储新单词。如果您不知道这是怎么发生的,请画出带有方框和箭头的图画。

如果你做了所有它应该工作的 - 至少它对我有用。此外:

  • 我希望你知道这个列表中有某种哨兵:用 node* ord = new node; 创建的元素始终保留在列表中并计算字符串 "" 的所有出现次数.您必须注意这一点(尤其是在释放列表中的元素时)。
  • 我会将这两个结构合并为一个结构,因为它使代码更具可读性(至少在我看来)。
  • 不要忘记正确释放列表!

关于c++ - cin 到链表核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com