【问题标题】:Vectors in functions, how to create find and erase function for deleting indexes based on user input (string)? [duplicate]函数中的向量,如何创建查找和擦除函数以根据用户输入(字符串)删除索引? [复制]
【发布时间】:2016-02-22 21:35:42
【问题描述】:

/* 因此,老师为构建和修改电话簿的课程构建了主体和原型。现在我几乎没有定义类函数,但在定义他的原型之一“void erase”和“void find”时遇到了麻烦。我从 void erase 开始,它应该在矢量 phone_book 中找到一个人并将其擦除,而“void find”只是定位所需字符串的索引(被搜索的人的姓名)。 我列出了老师建立的主要内容,他给我们的原型,以及我迄今为止在定义它们方面的工作。您可以在原型和我的工作中找到我询问的两个功能。 请注意,我不允许对教师主体或原型进行任何更改。 */

**the main:**

    #include <iostream>
    #include <string>
    #include <vector>
    #include <time.h>
    #include "phonebook.h"

    using namespace std;

    int main()
    {

        vector<Person> phone_book;
        string name;
        int number;
        int answer;

        srand((int)(time(0)));

        phone_book.push_back(Person("Bruin, Joe", 5556456));
        phone_book.push_back(Person("Simpson, Homer", 5557471));
        phone_book.push_back(Person("Duffman, Barry", 5533331));


        cout <<"\n";
        cout << "Your phone book contains the following names and numbers: \n";

        for (int i=0; i < phone_book.size(); i++)
        {

            phone_book[i].print();
            cout << "\n";
        }
        cout <<"\n";
        answer=0;

        while (answer != 8)
        {
            cout << "\nChoose from the following options:\n\n";

            cout << "1) Add people to the phone book.\n";
            cout << "2) Erase a person from the phone book.\n";
            cout << "3) Sort the phone book.\n";
            cout << "4) Shuffle the phone book.\n";
            cout << "5) Reverse the phone book.\n";
            cout << "6) Print the phone book.\n";
            cout << "7) Look up a person in the phone book.\n";
            cout << "8) Quit.\n\n";

            cin >> answer;

            string clear;

            getline(cin, clear);

            if (answer == 1)
                add_people(phone_book);
            else if (answer == 2)
            {
                cout << "Enter a name: ";
                getline(cin, name);
                erase(phone_book, name);

            }
            else if (answer == 3)
                sort(phone_book);
            else if (answer == 4)
                shuffle (phone_book);
            else if (answer == 5)
                reverse(phone_book);
            else if (answer == 6)
            {
                cout <<"\n";
                cout << "Your phone book contains the following names and numbers: \n";
                print(phone_book);
            }
            else if (answer ==7)
            {                   
                cout << "Enter a name: ";
                getline(cin, name);
                int number = lookup(phone_book, name); 
                if (number > 0)
                {
                    cout << "\n\nThe number for " << name << " is: " << number << "\n\n";
                }
                else
                    cout << name << " not found in the phone book.\n";
            }
        }
        return 0;
    }

**the prototypes:**

    #ifndef PHONEBOOK_H
    #define PHONEBOOK_H
    #include <string>
    #include <vector>
    using namespace std;

    class Person
    {
    public:
        Person();
        Person(string new_name, int new_phone);
        string get_name() const;
        int get_phone() const;
        bool operator < (Person p) const;
        void print() const;

    private:
        string name;
        int phone;
    };

    void add_people(vector<Person> &phone_book);
    void erase(vector<Person> &phone_book, string name);
    void sort(vector<Person> &phone_book);
    void shuffle(vector<Person> &phone_book);
    void reverse(vector<Person> &phone_book);
    void print(vector<Person> &phone_book);
    int lookup(const vector<Person> &phone_book, string name);
    #endif

**my work so far:**

#include <iostream>
#include <string>
#include <vector>
#include <time.h>
#include "phonebook.h"

Person::Person()
{
    name = "NONE";
    phone = 0000000;

}
Person::Person(string new_name, int new_phone)
{
    name=new_name;
    phone=new_phone;
}
string Person::get_name() const
{
    return name;
}
int Person::get_phone() const
{
    return phone;
}
bool Person::operator < (Person p) const
{
    return name < p.name;
}
void Person::print() const
{
    cout << endl << name << " " << phone;
}

void add_people(vector<Person> &phone_book)
{
    cout << "Please enter the new name: ";
    string s;
    getline(cin, s);
    cout << "Please enter new number: ";
    int number;
    cin >> number;
    phone_book.push_back(Person(s,number));
}
void erase(vector<Person> &phone_book, string name)
{
    for(int i=0; i <= phone_book.size()-1; i++)
    {
        phone_book[i] = phone_book[i+1];
    }
}
void sort(vector<Person> &phone_book)
{
}
void shuffle(vector<Person> &phone_book)
{
}
void reverse(vector<Person> &phone_book)
{
}
void print(vector<Person> &phone_book)
{

}
int lookup(const vector<Person> &phone_book, string name)
{

}

【问题讨论】:

  • phone_book.erase(vec.begin() + index);
  • 家庭作业?也许先尝试解决它:D

标签: c++ vector


【解决方案1】:

lookup 开始会更容易,因为您可以在erase 中重复使用它。

您需要做的是将电话簿phone_book[i].get_name() 中的每个姓名与您要查找的姓​​名进行比较。

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 2013-09-30
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多