Wie search-array von structs für ein string(name) und return-info für die Zeichenfolge(name)?
Mit diesem Programm, wenn ich einen Namen eingeben, wird nichts zurückgegeben.
Wie würde ich dieses Problem beheben?
Sind es 1000 Zeilen info, der wie folgt aussieht:
114680858 19670607 Matilda Vincent MI
114930037 19471024 Desdemona Hannover ID
115550206 19790110 Xanadu Perlman ND
116520629 19630921 Alexander Hall SD
117050976 19301016 David Neunaugen GA
119610646 19650202 Thomas Porlock IL
120330928 19621126 Cary Cartman NC
etc......
Code:
struct employees
{
int ss_number;//social security
int dob;//date of birth YYYY/MM/DD Ex.) 19870314=1987/03/14
string f_name;
string l_name;
string state; //state of residence
};
void read_file()//read file into array of 1000 structs
{
ifstream data("/home/www/class/een118/labs/database1.txt");
employees array[1000]
if(!data.fail())
{
int i;
for(int i=0;i<1000;i++)
{
data>>array[i].ss_number
>>array[i].dob
>>array[i].f_name
>>array[i].l_name
>>array[i].state;
}
for(int i=0;i<1000;i++)
{
cout<<array[i].ss_number>>" "<<array[i].dob>>" "<<array[i].f_name>>" "<<
array[i].l_name>>" "<<array[i].state;
}
}
}
void print_person(employees e)
{
cout<<e.ss_number>>" "<<e.dob>>" "<<e.f_name>>" "<<e.l_name>>" "<<e.state;
}
void search(employees array[])//type in name and get that persons ss_number,dob etc...
{
string first;
string last;
cout<<"Enter name";
cin>>first>>last;
for(int i=0;i<1000;i++)
{
if(array[i].f_name==first && array[i].l_name==last)
{
print_person(array[i]);
}
}
}
void main()
{
employees array[10];
read_file();
search(array);
}
// ...
- Was waren die Werte der Variablen, wenn Sie den debugger?
- Denken Sie daran, dass
==
führt zwischen groß-und Kleinschreibung Vergleich mit strings. Sie können konvertieren möchten, um alle Kleinbuchstaben oder Großbuchstaben vor dem Vergleich. - Ihre
cout
Linien sind voll von>>
.. ich auch nicht
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem
search
- Funktion, sollten Sie nicht verwenden die gleich-VergleichSollten Sie die
std::string::compare
Dadurch wird True zurückgegeben, in der gleichen Weise, die Sie erwartet hatten
==
zu.std::string::operator==()
? Ich habe keine Probleme mit ihm.Gibt es zwei arrays. Man ist in
main
, der andere ist inread_file
. Sie haben den gleichen Namen, aber unterschiedliche Größen.Array in
read_file
hat keine Beziehung zu der Reihe in dermain
. Sie übergeben das array zusearch
aber nicht zuread_file
. Ich schlage vor, Sie übergeben Sie das array zuread_file
von Referenz und entfernen Sie die array-Deklaration inread_file
.Besser noch, zu beseitigen, das array und die Verwendung
std::vector
. Es wärestd::vector<employees>
.Edit 1: Suche in array
In Ihrem
search
Funktion, die Sie brauchen, um passieren Sie zwei zusätzliche Parameter: array-Kapazität und die Anzahl der Datensätze im array. Wenn Siestd::vector<employees>
konnte man die Zahl der Mitarbeiter im array von:Den
for
Schleife verwenden würde Iteratoren:Sonst, mit einem array, in der Schleife würde so Aussehen:
Eine nette Verbesserung ist, dass diese Suchfunktion nicht hartcodieren der Größe. So ändern Sie die Größe von 10 (in
main
) bis 1000 ohne änderung dersearch
Funktion.Wenn Sie Sortieren Sie Ihre container, die Sie verwenden können, eine binäre Suche.
Siehe:
std::binary_search, std::find, std::lower_bound, std::upper_bound