Работа со структурами через указатели - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую. Не могу разобраться в следующем: есть массив структур. В структуре два элемента: строка и переменная, которая говорит о том, нужно удалять этот элемент массива или нет (если равна 1, то удалять, если 0, то нет). Не могу понять, как сделать все это через структуры. Обычным образом я бы попытался решить вот так (но это неправильно, т.к. нужно убирать элемент строки целиком, а не части структуры в отдельности):
typedef struct { char *word; int del; }   t_struct;
 
void del_eq(t_struct arr[], int n)
{
    int i = 0, j = n;
 
    while (arr[i].word != NULL)
    {
        while (arr[i].del == 0)
            i++;
        if (arr[j].del == 0)
        {
            while (arr[j].del == 1)
            {
                arr[j].word = NULL;
                arr[j].del = NULL;
                j--;
            }
            arr[i].del = 0;
            arr[i].word = arr[j].word;
            arr[j].word = NULL;
            arr[j].del = NULL;
        }
    }
 
}
Но как это реализовать через указатели? Нужно именно через них. Литературу читал. Не разобрался. Помогите, пожалуйста.

Решение задачи: «Работа со структурами через указатели»

textual
Листинг программы
typedef struct { char *word; int del; }   t_struct;
 
void del_eq(t_struct arr[], int n)
{
    int i = 0, j = (n-1);
 
    while ((arr[i].word != NULL) && (i < n))
    {
        while (arr[i].del == 0)
            i++;
 
        while (arr[j].del == 1)
        {
            arr[j].word = NULL;
            arr[j].del = NULL;
            j--;
        }
        if (arr[i].del ==1)
        {
            arr[i].del = 0;
            arr[i].word = arr[j].word;
            arr[j].word = NULL;
            arr[j].del = NULL;
            j--;
        }
    }

Объяснение кода листинга программы

В данном коде реализована функция del_eq, которая удаляет дублирующиеся элементы из массива структур t_struct с помощью сортировки.

  1. Структура t_struct содержит два поля: word типа char* (указатель на строку символов) и del типа int (целое число).
  2. В функции del_eq определены две переменные: i и j, которые используются для итерации по массиву структур. Переменная i инициализируется значением 0, а переменная j - значением n-1, где n - это размер массива структур.
  3. Далее, в цикле while происходит сравнение поля del структур, начиная с первого элемента массива. Если поле del равно 0, то происходит переход к следующему элементу массива.
  4. Если поле del равно 1, то в цикле while происходит изменение значений полей word и del для текущего элемента и предыдущего элемента массива. Значение поля word текущего элемента присваивается значению поля word предыдущего элемента, а значения полей word и del текущего элемента обнуляются.
  5. После выхода из цикла while, значение переменной i будет равно индексу первого элемента с полем del равным 1. Значение переменной j будет равно индексу последнего элемента с полем del равным 1.
  6. Возвращаемое значение функции del_eq - это индекс последнего элемента с полем del равным 1. Таким образом, функция del_eq возвращает индекс последнего элемента с полем del равным 1, что позволяет удалить дублирующиеся элементы из массива структур t_struct.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы