Работа со структурами через указатели - 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
с помощью сортировки.
- Структура
t_struct
содержит два поля:word
типаchar*
(указатель на строку символов) иdel
типаint
(целое число). - В функции
del_eq
определены две переменные:i
иj
, которые используются для итерации по массиву структур. Переменнаяi
инициализируется значением 0, а переменнаяj
- значениемn-1
, гдеn
- это размер массива структур. - Далее, в цикле
while
происходит сравнение поляdel
структур, начиная с первого элемента массива. Если полеdel
равно 0, то происходит переход к следующему элементу массива. - Если поле
del
равно 1, то в циклеwhile
происходит изменение значений полейword
иdel
для текущего элемента и предыдущего элемента массива. Значение поляword
текущего элемента присваивается значению поляword
предыдущего элемента, а значения полейword
иdel
текущего элемента обнуляются. - После выхода из цикла
while
, значение переменнойi
будет равно индексу первого элемента с полемdel
равным 1. Значение переменнойj
будет равно индексу последнего элемента с полемdel
равным 1. - Возвращаемое значение функции
del_eq
- это индекс последнего элемента с полемdel
равным 1. Таким образом, функцияdel_eq
возвращает индекс последнего элемента с полемdel
равным 1, что позволяет удалить дублирующиеся элементы из массива структурt_struct
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д