2 svar
162 visningar
Citrix 1
Postad: 9 nov 2023 11:54 Redigerad: 9 nov 2023 11:55

Sökfunktion i en array av structs

Hej! Jag håller på skapar en array av structs innehållande familjemedlemmar. Har letat efter information i flera dagar men nu börjar det bli kort om tid så jag chansar här! Skulle vilja ha tips om 2 saker:

1. Sök familjemedlem - vad ska jag använda för att låta användaren söka efter en familjemedlem som finns i min array? 

2. Ändra familjemedlem - i nuläget har jag lagt in att man kan ändra familjemedlem nr 4, men jag vill att användaren ska kunna välja själv vilken medlem som ska ändras, är detta möjligt?

#include <iostream>
#include <string>
#include <clocale>

using namespace std;

struct Person
{
    string namn;
    int ålder;
    char kön;
};

Person familj[4];

int main()
{
    setlocale(LC_ALL, "sv_SE");
    
    // Lista över familjemedlemmarna.
    familj[0].namn = "Anna";
    familj[0].ålder = 32;
    familj[0].kön = 'K';

    familj[1].namn = "Bill";
    familj[1].ålder = 37;
    familj[1].kön = 'M';

    familj[2].namn = "Charlie";
    familj[2].ålder = 8;
    familj[2].kön = 'M';

    familj[3].namn = "Mona";
    familj[3].ålder = 3;
    familj[3].kön = 'K';

    // Konstanter för menyval.
    const int VISA_VAL = 1,
        SÖK_VAL = 2,
        ÄNDRA_VAL = 3,
        AVSLUTA_VAL = 4;

    while (true) 
    {
        // Skriver ut menyn.
        cout << "::::::::Din familj::::::::" << endl;
        cout << endl;
        cout << "1. Visa familjemedlemmar" << endl;
        cout << "2. Sök familjemedlem" << endl;
        cout << "3. Ändra familjemedlem" << endl;
        cout << "4. Avsluta" << endl;
        cout << endl;
        cout << "Ange ditt val (1-4): ";

        // Användarens val.
        int menyVal;
        cin >> menyVal;
        cout << endl;

        // Olika utfall från menyn.
        switch (menyVal)
        {
        case VISA_VAL:
            for (int i = 0; i < 4; i++)
            {
                cout << "Namn: " << familj[i].namn << "\t" << "Ålder: " << familj[i].ålder << "\t" << "Kön: " << familj[i].kön << endl;
                cout << endl;
            }break;

        case SÖK_VAL:
            cout << "Ange namn på personen du söker: ";
            break;

        case ÄNDRA_VAL:
            cout << "Ange ett namn: ";
            cin >> familj[3].namn;
            cout << "Ange ålder: ";
            cin >> familj[3].ålder;
            cout << "Ange kön: ";
            cin >> familj[3].kön;
            break;

        case AVSLUTA_VAL:
            cout << "Avslutar programmet..\n";
            return 0;
        }
    }
}
Yngve 40442 – Livehjälpare
Postad: 9 nov 2023 14:37

Hej och välkommen till Pluggakuten!

1. Sök familjemedlem: Lägg in en fråga om namnet som skansökas i switchen SÖK_VAL. Läs in användarens svar i en strängvariabel. Iterera genom arrayen och jämför structens namn-fält med det inlästa namnet. Om match så skriv ut hela den strucrmten och bryt iterationen.

2. Ändra familjemedlem: Lägg in en fråga om vilken famiöjemedlem som ska ändras (nummer eller namn) i switchen ÄNDRA_VAL. Läs in användarens svar i en variabel. Iterera genom arrayen och leta efter rätt familjemedlem. Om match så fråga efter namn, ålder, kön som du redan gör, men anvönd rätt index.

anders_k 237
Postad: 9 nov 2023 16:13
  1. Du har redan en loop under case VISA_VAL:  lägg en likadan loop under SOK_VAL men först låter du användaren skriva in ett namn i en sträng variabel som du sen skall leta efter, sen loopa igenom arrayen och jämför namnet med de namn som finns i arrayen
  2.  Under case ÄNDRA_VAL: först läs in en siffra från tangentbordet, kolla om det är 0,1,2.3 om ja, använd det som index i den array. t.ex. int n; cin >> n; if (n > -1 && n < 4) .... familj[n]
Svara
Close