Je veux trouver un élément (nom de famille) dans ma structure

struct student
{
    char name[20];
    char surname[20];
    int marks;
};

Ofc définir le vecteur et l'élément de recherche à partir du clavier

vector <student> v;
char search_surname[20];

Je suis des éléments d'entrée par fonction:

    int size = v.size();
    v.push_back(student());
    cout << "Input name: " << endl;
    cin >> v[size].name;
    cout << "Input surname: " << endl;
    cin >> v[size].surname;
    cout << "Input marks: " << endl;
    cin >> v[size].marks;

Maintenant, quand j'ai par exemple trois noms de famille dans ma structure (newton, einstein, pascal), je veux trouver le nom de famille newton et cout tous les détails de la structure avec newton (nom, prénom, marques). Je n'ai aucune idée de ce que je dois faire.

-2
forqed 27 déc. 2015 à 05:05

3 réponses

Meilleure réponse

Une méthode de force brute:

for(vector <student>::iterator it = v.begin(); it != v.end(); it++)
{
    if (strcmp(it->surname, "newton") == 0)
    {
        cout << "name = " << it->name << endl;
        cout << "surname = " << it->surname << endl;
        cout << "marks = " << it->marks << endl;
    }
}

Veuillez ajouter #include <cstring> à votre code pour utiliser strcmp().

1
MikeCAT 27 déc. 2015 à 02:16

Avec STL, vous pouvez utiliser std::find_if de <algorithm>:

std::vector<student> v;


auto it = std::find_if(v.begin(), v.end(), [](const student& s)
              {
                  return strcmp(s.surname, "newton") == 0;
              });
if (it != v.end()) {
    std::cout << "name = " << it->name << std::endl;
    std::cout << "surname = " << it->surname << std::endl;
    std::cout << "marks = " << it->marks << std::endl;
}

Remarque: je suggère d'utiliser std::string au lieu de char[20] et ainsi la condition deviendrait return s.surname == "newton".

1
Jarod42 27 déc. 2015 à 10:08

J'ai récemment utilisé std :: find () de la bibliothèque

Cette fonction renvoie un itérateur et indique que la valeur de retour n'est pas end ().

0
2785528 27 déc. 2015 à 03:36