链接列表帮助C ++ [英] Linked List Help 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 infind_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屋!