1 Востаннє редагувалося Mirek7098 (04.11.2020 22:38:45)

Тема: Зачистка рядка двовимірного динамічного масиву який є в структурі

Допоможіть зачистити рядок двовимірного динамічного масиву символів який знахходиться в структурі. В даному випадку це

a.name[i]

та інші. Функція Sort має сортувати мою структуру за

а.area[i]

яке вводиться числом. Функція AddNew додає елементи(я її вставив для повноти картини). Як видно в коді я написав

a.name[i] = "";

але мені вибиває помилку.


struct Factory
{
    char** name;
    char** ownership;
    char** area;
    char** workers;
};
void Sort(int size, Factory& a)
{
    if (size > 1)
    {
        for (int i = 0; i < size - 1; i++)
        {
            if (atof(a.area[i]) > atof(a.area[i + 1]))
            {
                char* temp1 = new char[50];
                char* temp2 = new char[50];
                char* temp3 = new char[50];
                char* temp4 = new char[50];
                strcpy(temp1, a.name[i]);
                strcpy(temp2, a.ownership[i]);
                strcpy(temp3, a.area[i]);
                strcpy(temp4, a.workers[i]);
                //a.name[i] = "";
                strcpy(a.name[i], a.name[i + 1]);
                strcpy(a.ownership[i], a.ownership[i + 1]);
                strcpy(a.area[i], a.area[i + 1]);
                strcpy(a.workers[i], a.workers[i + 1]);
            }
        }
    }
}
void AddNew(int& size, Factory& a)
{
    size++;
    char** temp = new char* [size];
    char** temp1 = new char* [size];
    char** temp2 = new char* [size];
    char** temp3 = new char* [size];    
    for (int i = 0; i < size; i++)
    {
        temp[i] = new char[50];
        temp1[i] = new char[50];
        temp2[i] = new char[50];
        temp3[i] = new char[50];        
    }
    for (int i = 0; i < size - 1; i++)
    {
        strcpy(temp[i], a.name[i]);
        strcpy(temp1[i], a.ownership[i]);
        strcpy(temp2[i], a.area[i]);
        strcpy(temp3[i], a.workers[i]);
    }
    cout << "Enter the factory name: ";
    cin >> temp[size - 1];
    cout << "The types of property: N - national, P - private, C - cooperative";
    cout << "\nEnter the type of property: ";    
    cin >> temp1[size - 1];
    cout << "Enter the area of land(hectares): ";
    while (MyAudit(temp2[size - 1]) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin.ignore();
        cin >> temp2[size - 1];
    }    
    cout << "Enter the number of workers: ";    
    while (MyAudit(temp3[size - 1]) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin.ignore();
        cin >> temp3[size - 1];
    }        
    a.name = temp;
    a.ownership = temp1;
    a.area = temp2;
    a.workers = temp3;    
}

2

Re: Зачистка рядка двовимірного динамічного масиву який є в структурі

Я правильно зрозумів, що ви замість того, щоб проголосити масив структур, проголосили одну структуру із кількома масивами усередині?

Factory *factories = new Factory[size];
factories[size-1].name...

Так буде значно менше плутанини.
А ще краще користуватися стандартними шаблонами std::vector та std::string.

Що ж до вашої помилки, то ви б хоч написали, яку саме. Я, звісно, можу телепатично побачити, що там про неможливість присвоїти вказівнику на char значення типу const char *, але телепат з мене ніякий. У будь-якому разі, якщо ви використовуєте не плюсовий std::string, а сішний масив char-ів, то й працювати із ним слід відповідними функціями на кшталт strcpy.

Подякували: Mirek70981

3

Re: Зачистка рядка двовимірного динамічного масиву який є в структурі

Я щойно тільки почав вчити структури і користуватися std::vektor i std::string в даному завданні я на жаль не можу.

4 Востаннє редагувалося Mirek7098 (04.11.2020 22:55:51)

Re: Зачистка рядка двовимірного динамічного масиву який є в структурі

І зміювати я код вже не можу, бо на це в мене немає часу. Останнє що мені потрібно вирішити це як зачистити ці рядки

5

Re: Зачистка рядка двовимірного динамічного масиву який є в структурі

strcpy(a.name[i],"");

чи просто

a.name[i][0]='\0';

Ну, якщо у вас є час розбиратися з усіма проблемами, які вилізають через цю неправильність - то це, звісно, ваш час, і вам вирішувати, як ним розпорядитися.

Подякували: Mirek70981

6

Re: Зачистка рядка двовимірного динамічного масиву який є в структурі

Моя програма нарешті працює так як треба. Дякую за допомогу.