将文本文件读入链表

时间:2018-04-14 14:08:57

标签: c++ c++11

我正在开发一个程序,要求我读取文本文件并将数据插入到链表中。我很难将数据读入代码编译的链表中,但输出中没有任何内容。任何帮助或建议将不胜感激。

文本文件格式如下:string int int int int int int int int int int

  

A 83 140 228 286 426 612 486 577 836 0 0   Aaliyah 0 0 0 0 0 0 0 0 0 380 215

     

Aaron 193 208 218 274 279 232 132 36 32 31 41

     

Abbey 0 0 0 0 0 0 0 0 537 451 428

使用内部数据结构的链表。

linked_list<NameSurferEntry> database;

这是我用来解析文件中每一行的函数。

NameSurferEntry::NameSurferEntry(string line){
    vector<string> filelines;

    stringstream inputstringstream;

    year.push_back(1900);
    year.push_back(1910);
    year.push_back(1920);
    year.push_back(1930);
    year.push_back(1940);
    year.push_back(1950);
    year.push_back(1960);
    year.push_back(1970);
    year.push_back(1980);
    year.push_back(1990);
    year.push_back(2000);
    year.push_back(2010);

    while(getline(inputstringstream, line,' ')){
        filelines.push_back(line);
    }
    for(unsigned int i=1; i < filelines.size(); i++){
        cout << year.at(i-1) << " " << filelines.at(0 + 1) << "\n";
    }
        cout << " " << endl;

}

string NameSurferEntry::getName(){
    return name;
}

int NameSurferEntry::getRank(int decade){
    return year.at(decade);
}

这是我用来读取文本文件的函数。

NameSurferDataBase::NameSurferDataBase(string filename){
     ifstream input;
    input.open(filename);
    if(!input.is_open()){
        cout << "Not Open";

    }else{
        string temp;
        while(!input.eof()){
            getline(input,temp);
            if(!input.eof()){
                NameSurferEntry entry(temp);
                database.InsertInOrder(entry);
            }
        }
    }
}

Inser in Order:

template <class NODETYPE>
bool linked_list<NODETYPE>::InsertInOrder(NODETYPE value)
{
        if (IsEmpty()) {
                // A variable used to point to data that is being inserted.
                ListNode<NODETYPE> *temp = new ListNode<NODETYPE>;

                if (temp == NULL) return false;

                temp->data = value;

                first = last = current = temp;
                last->next = NULL;
        }
        else if (value >= last->data) {
                return InsertRear(value);
        }
        else if (first->data >= value) {
                return InsertFront(value);
        }
        else {
                // A variable used to point to data that is being inserted.
                ListNode<NODETYPE> *temp = new ListNode<NODETYPE>;

                if (temp == NULL) return false;

                temp->data = value;

                current = first;
                while (current->next->data < temp->data) {
                        current = current->next;
                }
                temp->next = current->next;
                current->next = temp;
                return true;
        }
    return false;
}

1 个答案:

答案 0 :(得分:0)

请查看您提供的以下代码:

在NameSurferDatabase中:

       while(!input.eof()){
            getline(input,temp);
            if(!input.eof()){
                NameSurferEntry entry(temp);
                database.InsertInOrder(entry);
            }

您正在从文件中正确读取1行并将其放入名为“temp”的字符串中。然后,您将“temp”字符串传递给NameSurferEntry。您现在期望使用此方法来剖析“temp”字符串。

但是,在NameSurferEntry中,您输入了以下内容:

    stringstream inputstringstream;
    while(getline(inputstringstream, line,' ')){
    filelines.push_back(line);
    }

您正在声明一个字符串流,默认为空。然后你做了一个while循环来做getline(inputstringstream,line,''),它将从inputstringstream获取1行并将其变为“line”。这将无变量替换变量“line”的内容。

以下是修复方法:

    stringstream inputstringstream;
    inputstringstream >> line;
    string temp;
    while(inputstringstream << temp){
    filelines.push_back(temp);
    }