Как скопировать массив символов структуры в другой массив символов структуры? - PullRequest
0 голосов
/ 16 июня 2020
#include <iostream>
using namespace std;

struct stud
{
    char name[10];
    int id;
};

int input(stud a[], int size)
{
    for(int i=1; i<=size; i++)
    {
        cout<<"name = ";
        cin>>a[i].name;
        cout<<"id = ";
        cin>>a[i].id;
    }
    cout<<endl;
    return 0;
}
int output(stud a[], int size)
{
    for(int i=1; i<=size; i++)
    {
        cout<<"name = "<<a[i].name<<" ";
        cout<<"id = "<<a[i].id<<" ";
    }
    cout<<endl;
    return 0;
}

int copy(stud a[], stud x[], int size)
{

    for(int i=1; i<=size; i++)
    {
        x[i].name=a[i].name; 
        x[i].id=a[i].id;
    }
    output(x,size);
    cout<<endl;
    return 0;
}

int main()
{

    struct stud s[3], x[3];
    input(s,3);
    output(s,3);
    copy(s,x,3);
    return 0;
}

В этой программе оператор в функции copy x[i].name =a[i].name; не копирует содержимое из одного объекта структуры в другой. Я попытался вставить это выражение для l oop for(int j=1;j<=10;j++) x[i].name[j] =a[i].name[j];, но все еще не работает. предложите, что следует изменить, или какие-то альтернативы для этого. Я буду вам очень благодарен за это.

С уважением, Умар

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Evrey single один из ваших циклов неверен, потому что в C ++ массивы начинаются с нуля. Так что не

for(int i=1; i<=size; i++)

вместо

for(int i=0; i<size; i++)

Вы не можете копировать массивы, написав a = b;. Поскольку ваши массивы на самом деле являются строками, существует встроенная функция strcpy для копирования строк.

strcpy(x[i].name, a[i].name);
0 голосов
/ 16 июня 2020

Работает либо использование al oop для копирования каждого символа в поле name, либо использование функции strcpy из заголовка <cstring>.

int copy(stud a[], stud x[], int size) {
    for(int i = 1; i <= size; i++) {
        // for(unsigned j = 0; j < 10; j++) {
        //     x[i].name[j] = a[i].name[j];
        // }
        strcpy(x[i].name, a[i].name);
        x[i].id = a[i].id;
    }
    output(x, size);
    cout << endl;
    return 0;
}

Но поскольку вы пометили это как c++, рассмотрите возможность использования std::string вместо массива символов, если у вас нет особой причины для использования массива символов. В этом случае x[i].name = a[i].name сработало бы нормально, и вы также могли бы использовать стандартную библиотеку algorithm для копирования. Кроме того, использование std::array вместо необработанного массива C для вас «массив структур» может быть лучшим вариантом (не вырождается в указатель, как обычный массив C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...