我在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;
}
}
答案 0 :(得分:1)
首先检查是否if(temp == NULL)
,如果是,那么您仍然想要访问它的成员。那不行。如果temp
为NULL
,则必须创建新的节点结构并将其添加到列表中(具体取决于temp
精确表示的内容)。所以有关节点结构和列表的更多信息会很棒。
修改强> 让我总结一下你应该做些什么:
ant
到0
和next
到NULL
(或nullptr
,如果您可以使用新标准)的结构。 if (cin >> x)
即可。您不需要它,因为您忽略在循环条件中读入x
的旧值(此外如果cin >> x
失败则覆盖现有条目)。但只有条件本身 - 而不是在其中执行的代码:你肯定需要代码,因为它创建了新节点来存储新单词。如果您不知道如何发生,请用方框和箭头画一幅画。如果你做了所有它应该工作 - 至少它然后为我工作。此外:
node* ord = new node;
创建的元素始终保留在列表中,并计算字符串""
的所有出现次数。你必须注意这一点(特别是在释放列表中的元素时)。