从文本文件读取并制作字典文本文件

时间:2019-02-22 16:53:26

标签: c++ linked-list

我想阅读一个文本文件并将新单词存储在链接列表中。从这个链接列表中,我想编写一个包含新单词的字典文件。我不知道为什么我的代码无法运行。谁能帮我吗?

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;
}

1 个答案:

答案 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;

相反。