我想阅读一个文本文件并将新单词存储在链接列表中。从这个链接列表中,我想编写一个包含新单词的字典文件。我不知道为什么我的代码无法运行。谁能帮我吗?
p / s:在运行调试时,将向量元素存储到new_node-> word时发现了这一点 Error 这是我的代码
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstring>
using namespace std;
typedef struct dictionary
{ string word;
int line;
int page;
struct dictionary* next;
} node;
int main()
{
node* Head = NULL;
ifstream file("filetest.txt");
if(file.fail())
cout << "Loi mo file! "<<endl;
string temp;
int cpage = 1,cline = 1;
while(getline(file,temp))
{
stringstream spliter;
spliter << temp;
vector<string> result;
while(!spliter.eof())
{
string str;
spliter >> str;
result.push_back(str);
}
for(size_t i = 0;i != result.size();i++)
{
if(Find(Head,result[i])==0)
{
Append(&Head,result[i],cline,cpage);
}
}
cline++;
if(cline == 25)
cpage++;
}
file.close();
;
ofstream outfile("test.txt");
node* p = Head;
while(p != NULL)
{
outfile << p->word <<","<<p->page<<"-"<<p->line<<endl;
p=p->next;
}
}
追加(将成员添加到链接列表)
void Append(node** First,string &newstr,int newl,int newp)
{
node* new_node = (node*)malloc(sizeof(node));
node* last = *First;
new_node->word=newstr;
new_node->line=newl;
new_node->page=newp;
new_node->next = 0;
if(*First == 0)
{
*First = new_node;
return;
}
while(last->next != 0)
{
last = last->next;
}
last->next = new_node;
return;
}
查找(检查单词是否是新单词)
int Find(node* head,string &tumoi)
{
node* current = head;
while(current != 0)
{
if(current->word == tumoi)
return 1;
current = current->next;
}
return 0;
}
答案 0 :(得分:1)
您不应将malloc
与C ++类型一起使用。不能正确初始化它们。
您的node
结构包含一个std::string
,需要对其构造函数进行调用才能正确初始化。
执行此操作
node* new_node = (node*)malloc(sizeof(node));
new_node->word=newstr;
new_node->word
未初始化,并且可以包含无处指向的指针。
您应该
node* new_node = new node();
new_node->word=newstr;
相反。