结构C的动态数组

问题描述 投票:0回答:1

我需要使用C ++创建动态电话列表

所以,我要解决的方法是创建一个简单的一维动态结构数组,其中每个结构都带有名称和电话号码。

struct Person {
char Name[100];
char Phone_Number[100];};

现在,我不确定如何创建一个通过创建新结构并将其添加到列表中的新条目的功能。类似于

void add () {
Person person1;
cout << "Please enter name:" << endl;
cin.getline(person1.Name, 100, '\n');
cout << "Please enter number:" << endl;
cin.getline(person1.Phone_Number, 100, '\n');
cout << "Successful!" << endl;}

??

c++ arrays function dynamic structure
1个回答
0
投票

您需要使用指针来创建结构的动态数组。如果需要有关指针的更多技术信息,可以检查this page

要声明动态数组,您只需要声明:

int n = 10;
Person* persons = new Person[n];

n将是您的总人数,而persons将是您的动态数组。您可以使用与普通数组相同的方式访问成员。

cout<<persons[5].Name<<endl;

现在,要添加数组的新成员,您需要增加人员总数,使用新的大小创建Person数组的新实例,然后将旧数组的值复制到新数组中。 >


void increaseArraySize(int n, Person* persons){
    Person* temp = new Person[n];

    for(int i=0; i < n; i++){
        temp[i] = persons[i];
    }

    persons = new Person[n+1];

    for(int i=0; i < n+1; i++){
        persons[i] = temp[i];
    }

    delete[] temp;
}

void add(int &n, Person* persons){
    Person person1;
    cout << "Please enter name:" << endl;
    cin.getline(person1.Name, 100, '\n');
    cout << "Please enter number:" << endl;
    cin.getline(person1.Phone_Number, 100, '\n');
    cout << "Successful!" << endl;

    increaseArraySize(n, persons);
    persons[n] = person1;
    persons[n] = person1;
    n++;
}

void print(int n, Person* persons){
    for(int i=0; i < n; i++){
        cout<<persons[i].Name<<endl;
        cout<<persons[i].Phone_Number<<endl;
        cout<<endl;
    }
}

int main(){
    int n = 0;
    Person* persons = new Person[n];

    add(n, persons);
    add(n, persons);

    print(n, persons);

    delete[] persons;
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.