链接列表帮助C ++ [英] Linked List Help C++

查看:67
本文介绍了链接列表帮助C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我需要帮助的是初始化我的find_person和print_person方法以在main.Right中运行。现在当我运行程序时,除了主要的cout和cin之外没有任何事情发生。如果不是完全正确的话,这些方法非常接近(如果它们不是请让我知道)(fyi,州和人信息来自同一个文件,我只是获取人物对象的所有信息,只是状态字符串输出对于状态对象。)任何帮助将不胜感激谢谢。



Basically what I need help with is the initialization of my find_person and print_person methods to work in main.Right now when I run the program, nothing happens except for the cout and cin stuff in main. The methods are pretty close if not completely correct(If they're not please let me know) (fyi, state and person info is from the same file, I just get all the info out for the person object and just the state string out for the state object.) Any help would be appreciated Thanks.

#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
using namespace std;

struct person
{
    int dob,ss_number;
    string fname, lname,state;

    person()
    { }
    person(int a, int b, string c, string d, string e)
    {dob=a; ss_number=b; fname=c; lname=d; state=e;}
};


struct state
{
    string sname;


    state()
    {}
    state(string a)
    {sname=a;}
};
template<typename T>struct Link
{
    T*data;
    Link*extradata;
    Link*next;

    Link()
    {}
    Link(T*a,Link<T>*C=NULL)
    {
        data=a;
        next=C;

    }

};
template<typename T>
struct List
{int length;
    Link<T>*Head,*tail;
    List(Link<T>*h=NULL, Link<T>*t=NULL)
    {
        Head=h;
        tail=t;
        length=0;
    }

    void add(T*object)
    {
        {   if (Head == NULL && tail == NULL)
        {   Link<T> * newlink = new Link<T>(object);
            Head = newlink;
            tail = Head;  }
        else
        {   Link<T> * newlink = new Link<T>(object);
            tail->next = newlink;
            tail=newlink;} }
    }

Link<person> * find_person(string Fname, string Lname)//finds person based on user input
{
    Link<person>* first;
    Link<person> * temp = first;

    while (temp != NULL)
    {
        if (temp->data->fname==Fname && temp->data->lname==Lname )
        {

            return temp;

        }

        temp = temp->next;
    }
    return NULL;
}

void print_person(Link<person> * printP)//prints person and all info
{
    if (printP == NULL)
        cout << "No people match search\n\n";
    else
    {
        cout << "SEARCH RESULTS FOR PERSON: \n" << "First Name: " << printP->data->fname <<
        "\n Last Name: " << printP->data->lname <<
        "\n Birthday: " << printP->data->dob <<
        "\n Social Security #:  " << printP->data->ss_number <<
        "\n State of Residence: "<< printP->data->state<<"\n\n";


    }
}

};
List<person>*person_from_file(string file)//reads file of people
{
    List<person>* newlist=new List<person>();
    //        Link<T> * head=NULL;
    //        Link<T> * temp=NULL;
    ifstream fin;
    fin.open("data.txt");
    if (fin.fail())
        cout<<"file not found\n";
    if (!fin.fail())
    {
        while(true)
        {
            int a,b;
            string c,d,e;
            fin>>a>>b>>c>>d>>e;
            if (fin.fail())break;
            person * p=new person(a,b,c,d,e);
            newlist->add(p);


        }
    }
    else
        cout<<"Can't open file";
    fin.close();
    return newlist;
}
List<state>*state_from_file(string file)//reads file of states
{
    List<state>* newlist=new List<state>();
    //        Link<T> * head=NULL;
    //        Link<T> * temp=NULL;
    ifstream fin;
    fin.open("data.txt");
    if (fin.fail())
        cout<<"file not found\n";
    if (!fin.fail())
    {
        while(true)
        {
            int a,b;
            string c,d,e;
            fin>>a>>b>>c>>d>>e;
            if (fin.fail())break;
            state * s=new state(e);
            newlist->add(s);


        }
    }
    else
        cout<<"Can't open file";
    fin.close();
    return newlist;
}

int main()
{List<person>*A = person_from_file("data.txt");
 List<state> *B= state_from_file("data.txt");
    cout<<"Search for Person: ";

    string f,l;
    cin>>f>>l;
    Link<person> *x=A->find_person(f,l);
    A->print_person(x);



    return 0;
}

推荐答案

您不从 find_person中列表的头部进行搜索;

更改;

You don't search from the head of the list in find_person;
Change;
Link<person> * find_person(string Fname, string Lname)//finds person based on user input
{
    Link<person>* first;
    Link<person> * temp = first;





类似于:



To something like;

Link<person> * find_person(string Fname, string Lname)//finds person based on user input
{
    Link<person>* first = Head;
    Link<person> * temp = first;





希望这会有所帮助,

Fredrik



Hope this helps,
Fredrik


这篇关于链接列表帮助C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆