我正在做一个学校的项目,在那里我们将制作一个联系簿。在其中一个函数中,它必须使用名字查找联系人。
出现的错误是它只显示向量中的一个联系人。我希望显示具有相同名称的所有联系人。
我如何实现一个循环或计数器(I++),以便它包括所有具有相同名称的联系人,而不只是采取第一个索引?
我是C++的新手,感谢所有的帮助:)
我的功能:
int findTargetFirstName(vector<Kontaktbok>& bok, string target) {
for (int i = 0; i < bok.size(); i++)
if (bok[i].fnamn == target) return i;
return -1;
void search(vector<Kontaktbok>& bok) {
if (bok.size() > 0) {
string firstname;
cout << "First name of the contact: ";
getline(cin, firstname);
int pos = findTargetFirstName(bok, firstname);
cout << "Firstname, Lastname, Address, Pnummer, E-post, Telefonnummer" << endl;
if (pos>=0) {
cout << left;
cout << setw(10) << bok[pos].fnamn << left
<< setw(15) << bok[pos].enamn << left
<< setw(20) << bok[pos].adress << left
<< setw(15) << bok[pos].pnummer <<left
<< setw(25) << bok[pos].epost <<left
<< setw(15) << bok[pos].telnummer << left << endl;
}
cout << "********************************************************************************" << endl;
}
}
一种方法是添加一个参数来确定从哪个元素开始。
int findTargetFirstName(vector<Kontaktbok>& bok, string target, int start = 0) {
for (int i = start; i < bok.size(); i++)
if (bok[i].fnamn == target) return i;
return -1;
}
void search(vector<Kontaktbok>& bok) {
if(bok.size() > 0) {
string firstname;
cout << "First name of the contact: ";
getline(cin, firstname);
int pos = findTargetFirstName(bok, firstname);
cout << "Firstname, Lastname, Address, Pnummer, E-post, Telefonnummer" << endl;
while (pos>=0){ // change if to while
cout << left;
cout << setw(10) << bok[pos].fnamn << left
<< setw(15) << bok[pos].enamn << left
<< setw(20) << bok[pos].adress << left
<< setw(15) << bok[pos].pnummer <<left
<< setw(25) << bok[pos].epost <<left
<< setw(15) << bok[pos].telnummer << left << endl;
pos = findTargetFirstName(bok, firstname, pos + 1); // search for next contact
}
cout << "********************************************************************************" << endl;
}
}
另一种方法是让函数
vector<int> findTargetFirstName(vector<Kontaktbok>& bok, string target) {
vector<int> ret;
for (int i = start; i < bok.size(); i++)
if (bok[i].fnamn == target) ret.push_back(i);
return ret;
}
void search(vector<Kontaktbok>& bok) {
if(bok.size() > 0) {
string firstname;
cout << "First name of the contact: ";
getline(cin, firstname);
vector<int> poses = findTargetFirstName(bok, firstname); // change type and variable
cout << "Firstname, Lastname, Address, Pnummer, E-post, Telefonnummer" << endl;
for (int pos : poses){ // change if to range-based for
cout << left;
cout << setw(10) << bok[pos].fnamn << left
<< setw(15) << bok[pos].enamn << left
<< setw(20) << bok[pos].adress << left
<< setw(15) << bok[pos].pnummer <<left
<< setw(25) << bok[pos].epost <<left
<< setw(15) << bok[pos].telnummer << left << endl;
}
cout << "********************************************************************************" << endl;
}
}